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

2024-01-14 17:58

本文主要是介绍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" οnclick="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)“抽风”的那点事儿的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/606019

相关文章

编译和链接那点事下

http://www.0xffffff.org/?p=357 上回书我们说到了链接以前,今天我们来研究最后的链接问题。         链接这个话题延伸之后完全可以跑到九霄云外去,为了避免本文牵扯到过多的话题导致言之泛泛,我们先设定本文涉及的范围。我们今天讨论只链接进行的大致步骤及其规则、静态链接库与动态链接库的创建和使用这两大块的问题。至于可执行文件的加载、可执行文件的运行时

编译和链接那点事上

http://www.0xffffff.org/?p=323  有位学弟想让我说说编译和链接的简单过程,我觉得几句话简单说的话也没什么意思,索性写篇博文稍微详细的解释一下吧。其实详细的流程在经典的《Linkers and Loaders》和《深入理解计算机系统》中均有描述,也有国产的诸如《程序员的自我修养——链接、装载与库》等大牛著作。不过,我想大家恐怕很难有足够的时间去研读这些厚如

url、src、href定义以及使用区别

引用文章链接: http://zhidao.baidu.com/link?url=ermCA61VBeA2E2OQq0YHEDDJmjL3r9voEqQ7-zAEGzvZMp44QXTc7RnW4B21goDfDIi5A48FQ_Zndaw8V1ClAa https://segmentfault.com/a/1190000002877022 关于url、src、href首先给出一个非常好

【UML建模】时序图的那点事

【UML建模】时序图的那点事 开篇词:干货篇:1.概述2.时序图的组成元素2.1角色(Actor):2.2生命线(Lifeline):2.3消息(Message):2.4激活条(Activation Bar):2.5时间标线(Time Axis):2.6组合片段(Combined Fragment):2.7注释(Note): 3.绘制步骤‌4. ‌注意事项‌:5.总结 我是杰叔叔,一名沪漂

安卓学习第一弹-关于ListView的那点事

ListView之手动的简单老虎机 如何使用listview: 第一步:在布局文件总声明ListView <ListView android:id="@+id/lv"android:layout_weight="1"android:layout_width="match_parent"android:layout_height="match_parent"></ListView

Objective-C总Runtime的那点事儿(一)消息机制

最近在找工作,Objective-C中的Runtime是经常被问到的一个问题,几乎是面试大公司必问的一个问题。当然还有一些其他问题也几乎必问,例 如:RunLoop,Block,内存管理等。其他的问题如果有机会我会在其他文章中介绍。本篇文章主要介绍RunTime。 RunTime简称运行时。就是系统在运行的时候的一些机制,其中最主要的是消息机制。对于C语言,函数的调用在编译的时候会决定调用哪

Vue 中 a标签上href无法跳转

问题:     使用vue-router 在IE下 a标签里的路由不跳转,火狐,chrome工作正常。 解决:     在App.vue 里增加判断IE浏览器手动修复…… export default {   name: 'App',   mounted(){     function checkIE(){       return '-ms-scroll-limit' in docume

JAVA操作Excel那些事儿

前段时间接了一个Excel的数据处理单子后,小生百度千寻,终于先后使用JXL,POI两个包的后,最终在老师的见一下,使用ODBC访问EXCEL的形式,对处理,对于几种处理EXCEKL的数据方法有了大致的了解和感受,现总结如下: 目标数据:固定格式的EXCEL数据从10W条到100W条不等,根据不同的要求,添加新的记录。即原来一条ABCD数据,变成ABCDE,对于EXCEL的使用

【bug记录8】vue-router和location.href跳转区别

一、问题背景 微信小程序的webView中更新配置、使用vue-router尝试跨域跳转,结果发现跳转失败 二、问题解决 改用location.href可成功。 三、原理总结 1、微信小程序会对一些数据、配置、资源进行缓存,如果不刷新则导致无法及时获取 2、如何使得页面及时刷新呢?这涉及到vue-router和location.href的跳转区别 这个博主做过总结:https

关于分布式数据库缓存设计的那点事和实践

目录 案例 【题目】 【问题 1】(9 分) 【问题 2】(8 分) 【问题 3】(8 分) 【答案】 【问题 1】答案 【问题 2】解析 【问题 3】解析 相关推荐 案例         阅读以下关于分布式数据库缓存设计的叙述,在答题纸上回答问题 1 至问题 3。 【题目】         某企业是为城市高端用户提供高品质蔬菜生鲜服务的初创企业,创业初期为快速