location是最有用的BOM对象之一,它提供了与当前窗口中加载的文档有关的信息,还提供了一些导航功能
事实上,location对象是很特别的一个对象,因为它既是window对象的属性,也是document对象的属性;换句话说,window.location和window.location引用的同一个对象。location对象的用处不止表现在它保存着当前文档的信息,还表现在它将URL解析为独立的片段,让开发人员可以通过不同的属性访问这些片段
下表列出了location对象的所有属性(注:省略了每个属性前面的location前缀)
属性名 | 例子 | 说明 |
---|---|---|
hash | "#contents" | 返回URL中的hash(#号后跟零或多个字符),如果URL中不包含散列,则返回空字符串 |
host | "www.wrox.com:80" | 返回服务器名称和端口号(如果有) |
hostname | "www.wrox.com" | 返回不带端口号的服务器名称 |
href | "http:/www.wrox.com" | 返回当前加载页面的完整URL。而location对象的toString()方法也返回这个值 |
pthname | "/wiley/" | 返回URL中的目录和(或)文件名 |
port | "8080" | 返回URL中指定的端口号。如果URL中不包含端口号,则这个属性返回空字符串 |
protocol | "?q=javascript" | 返回URL的查询字符串。这个字符串以问号开头 |
查询字符串参数
虽然通过上面的属性可以访问到location对象的大多数信息,但其中访问URL包含的查询字符串的属性并不方便。尽管location.search返回从问号到URL末尾的所有内容,但没有办法逐个访问其中的每个查询字符串参数。为此,可以像下面这样创建一个函数,用以解析查询字符串,然后返回包含所有参数的一个对象:
function getQueryStringArgs() {
var qs = (location.search.length > 0 ? location.search.substring(1) : ""),
args = {},
items = qs.length ? qs.split("&") : [],
item = null,
name = null,
value = null,
// 在for循环中使用
i = 0,
len = items.length;
for (var i = 0; i < len; i++) {
item = items[i].split("=");
name = decodeURIComponent(item[0])
value = decodeURIComponent(item[1])
if (name.length) {
args[name] = value
}
}
return args
}
getQueryStringArgs()
假如地址栏中的地址为:
https://m.120xinmao.com/share?tid=5&did=461
得到的结果为:
{tid: "5", did: "461"}
网友评论