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的特性。

你可能感兴趣的:(JavaScript,IE)