`
snake_hand
  • 浏览: 575420 次
社区版块
存档分类
最新评论

IE6、7下a.getAttribute("href",2)“抽风”的那点事儿

 
阅读更多

简述

在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会做一些它认为正确的“容错”处理……容着容着,就让我错了……

 

 

by Lcllao.

分享到:
评论

相关推荐

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

    一个单页应用,想根据a的href属性的值,是否http://开头。如果是,则继续跳转;如果不是,则通过兼容的pushState修改url地址,触发route,可往往不是想象中的那么顺利,感兴趣的你可以了解本

    request.getParameter() 和request.getAttribute() 区别

    request.getParameter() 和request.getAttribute() 区别

    session.getAttribute

    session.getAttribute在servlet中是一个很重要的方法。

    JS绿色自行车行驶动画特效.zip

    this.getAttribute("data-r") "," this.getAttribute("data-g") "," this.getAttribute("data-b") "," "1)"; colorObj.r=this.getAttribute("data-r"); colorObj.g=this.getAttribute("data-g"); colorObj.b=...

    基于request.getAttribute与request.getParameter的区别详解

    本篇文章小编为大家介绍,基于request.getAttribute与request.getParameter的区别详解。需要的朋友参考下

    getAttribute和getParameter区别.

    这样getAttribute就能取得你所设下的值,当然这种方法可以传对象。session也一样,只是对象在内存中的生命周期不一样而已。 getParameter只是应用服务器在分析你送上来的request页面的文本时,取得你设在表单或url...

    IE6、IE7中setAttribute不支持class/for/rowspan/colspan等属性

    在IE6/7中样式“abc”将没有起作用,虽然使用el.getAttribute(‘class’)能取到值“abc”。 又如for属性 代码如下: 姓名:&lt;/label&gt;&lt;input type=”checkbox” id=”name”/&gt; [removed] var lab = document....

    IE6/7中getAttribute获取href/src 属性(相对路径0值与其它浏览器不同

    IE6/7中getAttribute获取href/src 属性(相对路径0值与其它浏览器不同的解决方法

    js中的getAttribute方法使用示例

    getAttribute()方法 至此,我们已经向大家介绍了两种检索特定元素节点的办法:一种是使用getElementById()方法,另一种是使用getElementsByTagName()方法。在找到那个元素后,我们就可以利用getAttribute()方法把它...

    javaEE j2ee 大学考试题库,j2ee开发面试题库-1

    共有88道选择题,37道填空题,7个简答题和3个程序题 如: 1. 在 JSP 中,( )动作作用于将请求转发给其他 JSP 页面。 A. forward B. include C. sendRedirect D. response 2. 一个 servlet 的生命周期不包括( )...

    基于JSP的网上书城的设计与实现

    Vector catList = (Vector)session.getAttribute(Constants.BOOK_CAT_LIST_KEY); Vector bookList = (Vector)session.getAttribute(Constants.BOOK_LIST_KEY); Book book = null; BookCat bookCat = null; ...

    j2ee期末复习资料

    j2ee复习资料 一、选择题 1.page 指令的(b )属性用于引用需要的包或类 A. extends B.import C. isErrorPage D....2.下列选项中,(b ) 可以准确地...A.getAttribute B.setContentType C.sendRedirect D.setAttribute

    simpleHtml 3.0

    var simpleHtmlTree2 = new SimpleHTMLTree("treepanel1","./images/");  simpleHtmlTree2.nodeClickEvent = function(nodeId) { alert("请在此函数内部重载节点的单击事件"); var nodePanel=document....

    js中的getAttribute方法使用示例.docx

    js中的getAttribute方法使用示例.docx

    js页面效果很好的流程图

    一个效果很好的流程图 大家看看吧 var opener = window.dialogArguments; var FlowXML = opener.... document.all.Hidden2.value = Flow.getElementsByTagName("BaseProperties").item(0).getAttribute("flowText");

    getAttribute和getParameter区别

    getAttribute和getParameter区别 getAttribute和getParameter区别

    JS实现获取自定义属性data值的方法示例

    本文实例讲述了JS实现获取自定义属性data值的方法。分享给大家供大家参考,具体如下: ...console.log(tree.getAttribute(data-leaves)); console.log(tree.getAttribute(data-plant-height)); //setAttri

    jsp源码-网络交易系统

    List&lt;Article&gt; alist2 = (List)request.getSession().getAttribute("alist2"); Iterator&lt;Article&gt; in2 = alist2.iterator(); List&lt;Article&gt; alist3 = (List)request.getSession().getAttribute("alist3"); ...

Global site tag (gtag.js) - Google Analytics