位置是最有用的BOM对象之一,它提供了关于当前窗口中加载的文档的信息,还提供了一些导航功能。事实上,位置对象是一个非常特殊的对象,因为它既是窗口对象的属性,也是文档对象的属性。换句话说,window.location和document.location引用同一个对象。location对象的使用不仅在于它保存了当前文档的信息,还在于它将URL解析成独立的片段,这样开发者就可以通过不同的属性访问这些片段。下表列出了location对象的所有属性(注意:省略了每个属性前的位置前缀)。
举例说明
哈希& # 34;#目录& # 34;返回URL中的散列值(#后跟零个或多个字符),如果URL不包含散列值,则返回空字符串host & # 34www . wrox . com:80 & # 34;返回服务器名称和端口号(如果有)主机名& # 34;www . wrox . com & # 34;返回不带端口号的服务器名称href & # 34;http:/www . wrox . com & # 34;返回当前加载页面的完整URL。location对象的toString()方法也返回这个值pathname & # 34/Wiley CDA/& # 34;在URL中返回目录和/或文件名端口& # 34;8080"返回URL中指定的端口号。如果URL不包含端口号,该属性返回空字符串协议& # 34;http:& # 34;返回页面使用的协议。通常是http:或https:search & # 34;?q = jascript & # 34返回URL的查询字符串。
该字符串以问号开头。查询字符串参数
虽然可以通过上述属性访问位置对象的大部分信息,但是访问URL中包含的查询字符串的属性并不方便。虽然location.search返回从问号到URL末尾的所有内容,但是没有办法逐个访问每个查询字符串参数。为此,您可以创建一个函数来解析查询字符串,如下所示,然后返回一个包含所有参数的对象:
函数getQueryStringArgs(){
//获取查询字符串,去掉开头的问号
var QS =(location . search . length > 0?location . search . substring(1):& # 34;"),
//保存数据的对象
args = {},
//Get each item
items = QS . length?QS . split(& # 34;&"):[],
item = null,
name = null,
value = null,
//在for循环中使用
I = 0,
len = items . length;
//将每一项逐个
添加到for(I = 0;我& ltleni++){
item = items[i]。拆分(& # 34;=");
name = decodeURIComponent(item[0]);
value = decodeURIComponent(item[1]);
if(name . length){
args[name]= value;
}
}
返回参数;
}
LocationExample01.htm
该函数的第一步是删除查询字符串开头的问号。当然,前提是location.search必须包含一个或多个字符。然后,所有参数都将保存在args对象中,该对象是作为文字创建的。接下来,查询字符串根据&符号进行划分,并返回一个name=value格式的字符串数组。下面的for循环遍历这个数组,然后根据等号划分每一项,从而返回一个数组,第一项作为参数名,第二项作为参数值。然后使用decodeURIComponent()分别对名称和值进行解码(因为应该对查询字符串进行编码)。最后,将name作为args对象的属性,将value作为相应属性的值。下面给出了一个使用该函数的例子。
//假设查询字符串是?q=jascript&num=10
var args = getQueryStringArgs();
alert(args[& # 34;q & # 34]);//"jascript & # 34
alert(args[& # 34;num & # 34]);//"10"
可以看出,每个查询字符串参数都成为返回对象的一个属性。这极大地方便了对每个参数的访问。
位置操作
您可以使用location对象以多种方式更改浏览器的位置。第一种也是最常见的方法是使用assign()方法,并传递给它一个URL,如下所示。
location . assign(& # 34;http://www . wrox . com & # 34;);
这样,您可以立即打开一个新的URL,并在浏览器的历史记录中生成一条记录。如果location.href或window.location被设置为URL值,则也将使用该值调用assign()方法。例如,下面两行代码与显式调用assign()方法具有完全相同的效果。
window . location = & # 34;http://www . wrox . com & # 34;;
location . href = & # 34;http://www . wrox . com & # 34;;
在这些改变浏览器位置的方法中,最常见的是设置location.href属性。
此外,修改location对象的其他属性也可以更改当前加载的页面。以下示例显示了通过将哈希、搜索、主机名、路径名和端口属性设置为新值来更改URL。
//假设初始URL是http://www.wrox.com/WileyCDA/.
//修改网址为& # 34;http://www.wrox.com/WileyCDA/#section1"
location . hash = & # 34;# section1 & # 34;
//修改网址为& # 34;http://www.wrox.com/WileyCDA/? q = JaScript & # 34;
location . search = & # 34;?q = jascript & # 34;
//修改网址为& # 34;http://www.yahoo.com/WileyCDA/"
位置。主机名= & # 34;www . Yahoo . com & # 34;;
//修改网址为& # 34;http://www.yahoo.com/mydir/"
location . pathname = & # 34;mydir & # 34;
//修改网址为& # 34;http://www.yahoo.com:8080/WileyCDA/"
location . port = 8080;
每次修改location的属性(除了hash)时,页面都会被重新加载一个新的URL。
在IE8、Firefox 1、Safari 2+、Opera 9+和Chrome中,修改hash的值会在浏览器历史中生成一条新记录。在IE的早期版本中,当用户单击“后退”和“前进”按钮时,hash属性不会更新,只有当用户单击包含hash的URL时才会更新。
当以上述任何方式修改URL时,浏览器的历史记录中将生成一条新记录,因此用户将通过单击“后退”按钮导航到上一页。要禁用这种行为,可以使用replace()方法。该方法只接受一个参数,即URL导航到;因此,尽管浏览器的位置会发生变化,但历史记录中不会生成新的记录。调用replace()方法后,用户无法返回上一页。看看下面这个例子:
<!DOCTYPE html & gt
& lt;html & gt
& lt;head & gt
& lt;title & gt你赢了& # 39;I don’我无法回到这里。/title & gt;
& lt;/head & gt;
& lt;body & gt
& lt;p & gt享受这一页一秒钟,因为你赢了& # 39;我不会再回来了。& lt/p & gt;
& lt;脚本类型= & # 34;文本/JaScript & # 34;& gt
setTimeout(function(){
location . replace(& # 34;http://www.wrox.com/");
},1000);
& lt;/script & gt;
& lt;/body & gt;
& lt;/html & gt;
如果你想了解更多的ja基础知识,可以点击评论区的链接,跟着边肖学Ja。这个视频教程是针对初学者的,是零基础的入门文章!为同学们带来全新的Ja300集课程!Ja零基础小白自学Ja必备优质教程_用动手图学习Ja,让学习成为一种乐趣_哔哩哔哩_毕丽毕丽
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。