Rumah  >  Soal Jawab  >  teks badan

javascript - 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>
 <p id="container">
 <p class="item">浮动测试</p>
 <p class="item">浮动测试</p>
 <p class="item">浮动测试</p>
 <p class="item">浮动测试</p>
 <p class="item">浮动测试</p>
 <p class="item">浮动测试</p>
 <p class="item">浮动测试</p>
 </p>
 <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源码的孩纸请教了)

伊谢尔伦伊谢尔伦2725 hari yang lalu613

membalas semua(2)saya akan balas

  • ringa_lee

    ringa_lee2017-04-10 12:47:35

    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

    balas
    0
  • 高洛峰

    高洛峰2017-04-10 12:47:35

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

    balas
    0
  • Batalbalas