IE的href 设值BUG

今天研究KISSY1.3 RC源代码时看到这样一段代码,如下:

if (IE_VERSION && IE_VERSION < 9) {
// https://github.com/kissyteam/kissy/issues/198
// http://social.msdn.microsoft.com/Forums/en-US/iewebdevelopment/thread/aa6bf9a5-0c0b-4a02-a115-c5b85783ca8c
// http://gabriel.nagmay.com/2008/11/javascript-href-bug-in-ie/
// https://groups.google.com/group/jquery-dev/browse_thread/thread/22029e221fe635c6?pli=1
var hrefFix = attrHooks[HREF] = attrHooks[HREF] || {};
hrefFix.set = function (el, val, name) {
var childNodes = el.childNodes,
b,
len = childNodes.length,
allText = len > 0;

for (len = len - 1; len >= 0; len--) {
if (childNodes[len].nodeType != NodeType.TEXT_NODE) {
allText = 0;
}
}

if (allText) {
b = el.ownerDocument.createElement('b');
b.style.display = 'none';
el.appendChild(b);
}

el.setAttribute(name, EMPTY + val);

if (b) {
el.removeChild(b);
}
};
}

代码的作用是解决一个IE6,7,8版本的bug。
可以通过下面的例子发现问题

<body>
<a href='#' id='a'>www.aa</a>
</body>
<script type="text/javascript">
document.getElementById("a").href='http://docs.kissyui.com';
</script>

在IE下执行这段的代码会发现
<a href='#' id='a'>www.aa</a>
被改成
<a href='http://docs.kissyui.com' id='a'>http://docs.kissyui.com</a>
a标签的text也被替换掉了。经过测试发现,一般text的值中有.和@等字符会被错误替换。
当a标签内嵌套有其他标签时则不会出现这种问题。

KISSY的实现就是利用了当a标签内有嵌套其他标签则不会出现BUG的特性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值