获得原始href属性的方法
JavaScript里得到某个链接的href属性时,有三种方式,总结一下:
1. 直接获得href属性,也就是
var url = el.href; // el是一个a元素
2. 使用getAttribute方法,像这样:
var url = el.getAttribute("href");
3. IE下的getAttribute方法有第二个参数,参见msdn的这篇。第二个参数如果是2,意思是以字符串形式返回。
var url = el.getAttribute("href", 2);
获得href属性的这三种方法,同样的,有三点,让人很费解,而且浏览器实现各不相同。
- 如果href写的是相对地址,得到属性时,浏览器可能会自动转为绝对地址。(很多情况下我们是不希望这样的)
- 如果href里有汉字,浏览器会自动编码吗?
- 如果href里有特殊字符,浏览器会自动编码吗?例如大括号{}。
为此我做了一个小测试页面(点这里可测试),得到了如下的结果:
| 获得href和src属性的浏览器差异(相对地址与自动编码情况) | |||
|---|---|---|---|
| .href | getAttribute(“href”) | getAttribute(“href”, 2) | |
| IE6 | 转绝对,不编码 | 转绝对,不编码 | 正常 |
| IE7 | 转绝对,汉字不编码,特殊符号编码 | 转绝对,汉字不编码,特殊符号编码 | 正常 |
| IE8 as IE7 | 转绝对,汉字不编码,特殊符号编码 | 转绝对,汉字不编码,特殊符号编码 | 正常 |
| IE8 standard | 转绝对,汉字不编码,特殊符号编码 | 正常 | 正常 |
| Firefox 3.0+ | 转绝对,全部编码 | 正常 | 正常 |
| Chrome 2.0 | 转绝对,全部编码 | 正常 | 正常 |
| Safari 4.0 | 转绝对,汉字编码,特殊符号不编码 | 正常 | 正常 |
| Opera 10.0beta | 转绝对,汉字编码,特殊符号不编码 | 正常 | 正常 |
其中,“正常”的意思是,得到href属性里原始链接,不自动转绝对地址、汉字和符号都不编码。
结论,如果想得到href里的未经转换、未经编码的原始内容,IE浏览器下全部使用getAttribute(“href”, 2),其他浏览器下使用getAttribute(“href”)即可,这在序列化DOM时会非常有用;如果想得到绝对地址、编不编码没关系,那就用href属性。
You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.
学习了。进步中。谢谢。
ie7-真是事多…
另外IE8 as IE7不需要测试了吧…
直接用getAttribute(”href”, 2)
第二参数让浏览器忽略掉…
[...] http://jsfox.cn/blog/javascript/get-right-href-attribute.html 作者: [...]
Pillspot.org. Canadian Health&Care.No prescription online pharmacy.Special Internet Prices.PillSpot.org.
XHTML: You can use these tags:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>