IE6/7下a.getAttribute(href,2)的问题分析及解决

所属分类: 网页制作 / 应用技巧 阅读数: 1346
收藏 0 赞 0 分享

简述
在IE6、7下,一般的a标签(写好在HTML中的,通过dom操作插入到页面中的a标签)中,假如href的值是一个相对路径时,直接通过a.getAttribute("href"),获取到的不是href的原始值,但可以通过a.getAttribute("href",2)获取到原始值;但如果这种a标签是通过innerHTML插入的话,即使通过a.getAttribute("href",2)也无法获取原始的href值。估计在innerHTML='<a href="/haha">test</a>'的时候,IE6、7会对其做兼容处理,加入一些东西,这个时候通过outerHTML查看,a的href已经是完整地址-_-! 据说img的src也会出现类似情况。
匆匆路过的……看完上面即可……下面开始瞎扯:
---------------------------------------------------------------------------------------------------------------------------------
原始目标:一个单页应用,想根据a的href属性的值,是否http://开头。如果是,则继续跳转;如果不是,则通过兼容的pushState修改url地址,触发route。
问题:测试IE6、7时,发现a未能正确拦截……
解决办法:问谷姐……得知IE6、7的getAttribute有第二个参数,设为2即可取回原来的属性值。介绍链接如下:
http://msdn.microsoft.com/en-us/library/ie/ms536429%28v=vs.85%29.aspx
看到这里,心里暗爽,马上补一句代码……在按下Ctrl+F5测试后…马上歇菜……为啥不行呢?!百思不得其解……
这时候跟一位朋友瞎扯……不知道扯哪去了……最后在问Frank的过程中,我排除了代码中其他干扰,用以下代码测试:

复制代码
代码如下:

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>test</title>
</head>
<body>
<a id="a" href="" onclick=".getAttribute(\"href\",2)">test</a>
</body>
</html>

 在IE6、7下点击,都弹出大大的“/haha”!!!我就开始怀疑是其他东西在搞鬼了。这时候,想到我的a标签是怎么来的(基于字符串的js模板,innerHTML)……于是,再通过以下代码模拟:

复制代码
代码如下:

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>test</title>
</head>
<body>
<div id="test"></div>
<script>
document.getElementById("test").innerHTML = '<a id="a" href="/haha" onclick="alert(this.getAttribute(\'href\',2));return false;">test</a>';
</script>
</body>
</html>

再次测试……sister's……重现问题了!实测,在生成a之后,对a再次setAttribute("href","/haha",2),再getAttribute("href",2)可以拿回“/haha”。但如果要在模板中做这种事情,似乎太恶心了,果断放弃!还是听Frank的话……简简单单加个属性标识两种链接元素,别钻牛角尖。
再钻一钻-_-!:

复制代码
代码如下:

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>test</title>
</head>
<body>
<div id="test"></div>
<script>
var test = document.getElementById("test");
var a = document.createElement("a");
var txt = document.createTextNode("test");
a.href="/haha";
a.onclick=function() {
alert(this.getAttribute('href',2));//"/haha"
return false;
};
a.appendChild(txt);
test.appendChild(a);
</script>
</body>
</html>

最后,怀疑通过innerHTML插入节点时,ie6、7会做一些它认为正确的“容错”处理……容着容着,就让我错了……

更多精彩内容其他人还在看

关于favicon.ico的两三事(最好就是放根目录)

最近网站开始改版,如果文档中没有声明favicon.ico,在chrome浏览器中会自动加载根目录的favicon.ico,正好将具体的分析也分享一下, 方便需要的朋友
收藏 0 赞 0 分享

分享10个最新的Web前端框架(翻译)

前端Web框架的本质就是JavaScript,CSS和HTML相关组件的集合,你可以把它应用到日常的项目中,可以极大节省开发时间,特别是在那些紧急的项目中。这里,我们为大家列出了10个前端Web框架,可以参考
收藏 0 赞 0 分享

分享15个最佳的HTML/CSS设计和开发框架

高效的框架不仅是网站设计的基础,它提供的各种丰富多彩的功能,还提高整体的功能和性能。一个网站的外观和设计完全可以通过一些完美和可靠的工具而彻底改头换面。现在,越来越多的网页设计师和编辑人员选择使用CSS框架来创建网站
收藏 0 赞 0 分享

关于启用 HTTPS 的一些经验分享

这篇文章主要介绍了关于启用 HTTPS 的一些经验分享,需要的朋友可以参考下
收藏 0 赞 0 分享

人人必知10个网站易用性技巧

这篇文章主要介绍了人人必知10个网站易用性技巧 的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

CSS3实用方法总结(推荐)

下面小编就为大家带来一篇CSS3实用方法总结(推荐)。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Web前端开发中找错的基本思路

本文给大家分享了在制作web前端页面的时候,找错、查错以及解决错误的方法,非常的详细,这里推荐给大家,希望对大家能有所帮助。
收藏 0 赞 0 分享

深入理解指定IE浏览器渲染方式

本文详细向大家讲解了IE浏览器设置只能渲染方式的方法及其含义。前端设计师们比较痛恨的浏览器就是IE了,没有之一!!今天主要来探讨设置兼容性即指定IE浏览器渲染方式。
收藏 0 赞 0 分享

让网页自动调用双核浏览器的极速模式(Webkit)

国内的主流浏览器都是双核浏览器:基于Webkit内核用于常用网站的高速浏览。基于IE的内核用于兼容网银、旧版网站
收藏 0 赞 0 分享

如何设计制作自适应网页

本文介绍了
收藏 0 赞 0 分享
查看更多