首页 > ie6下某些元素不能获取到nodeName,什么原因?

ie6下某些元素不能获取到nodeName,什么原因?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>无标题页</title>
    <style type="text/css">
    .item{float:left;width:100px;height:100px;margin-left:50px;margin-top:50px;background:#ccc;}
    #container{overflow:hidden;width:500px;padding-right:50px;border:1px solid #000;}
    </style>
</head>
<script  type ="text/javascript">
window.onload = function (){
elems = document.body.childNodes;
for (var i = 0; i < elems.length; i++){
    elems[i].onclick = function (e) {
        //triggerElement = e ? e.target :event.srcElement;
        //alert(triggerElement.nodeName);
        alert(this.nodeName);
    }
}


}


</script>

<body>
 <div id="container">
 <div class="item">浮动测试</div>
 <div class="item">浮动测试</div>
 <div class="item">浮动测试</div>
 <div class="item">浮动测试</div>
 <div class="item">浮动测试</div>
 <div class="item">浮动测试</div>
 <div class="item">浮动测试</div>
 </div>
 <a href="#">呵呵 这是一个链接</a>
 <ul>
    <li>列表一</li>
    <li>列表二</li>
    <li>列表三</li>
</ul>
<span>这是一个span</span>
<p>这是一个p</p>

 </body>


</html>

以上是测试代码,在firefox/ie7+/chorme下代码都正常运行,但是在ie6下面 li span p 这几个标签的nodeName却没有弹出来(this和event情况相同),这个兼容性问题怎么修复? (确认jq已经修正了该问题,没读过jq源码的孩纸请教了)


//在这里加一个判断 if(elems[i].nodeType === 1) { elems[i].onclick = function (e) { //triggerElement = e ? e.target :event.srcElement; //alert(triggerElement.nodeName); alert(this.nodeName); } }


for (var i = 0; i < elems.length; i++){
    if (elems[i].nodeType == 1) {
        elems[i].onclick = function (e) {
            //triggerElement = e ? e.target :event.srcElement;
            //alert(triggerElement.nodeName);
            alert(this.nodeName);
        }
    }
}

要加上判断nodeType,因为document.body.childNodes中不仅包括了标签,还有文字。关于node有很多种类型,对应类型码如下。而ElEMENT_NODE才有onclick这个属性,所以TEXT_NODE的节点在onclick时会出错,程序中断了,后面的节点自然无法触发点击事件,所以你会发现LI SPAN P这几个标签没反应,不信你可以先不修改代码,只把html中这几个标签提前到最前面,看是不是可以触发了。


ELEMENTNODE 1
ATTRIBUTE
NODEDeprecated 2
TEXTNODE 3
CDATA
SECTIONNODEDeprecated 4
ENTITY
REFERENCENODEDeprecated 5
ENTITY
NODEDeprecated 6
PROCESSINGINSTRUCTIONNODE 7
COMMENTNODE 8
DOCUMENT
NODE 9
DOCUMENTTYPENODE 10
DOCUMENTFRAGMENTNODE 11
NOTATION_NODEDeprecated 12

【热门文章】
【热门文章】