js操作节点,只能通过getElementsByTagName,却不能通过childNodes来操作节点??

<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
</head>
 
<body>
            <div ></div>
      
</body>
</html>
        //常用的获取节点 操作节点方法
       <script>
           var ht = document.getElementsByTagName("html");
            //改变html对象的背景色
           ht[0].style.backgroundColor= "#000";   //可以改变背景为黑色;
 
             // 用childnodes, 操作节点
              var ddd = document.firstChild;
                 ddd..style.backgroundColor= "#000";   //啥也没改变;
                 </script>

用getElementsByTagName取得的节点对象可以绑定事件 如

                  ht[0].onclick = function(){};
           用用childnodes, 取得的节点 不能绑定事件?仅仅能获取到节点名而已?其他啥也不能做?
阅读 2.9k
2 个回答

console.log(document.firstChild) 看看是啥你就知道了。

Node是一个接口,从文档的结构角度来看的;
Document, Element, CharacterData, ProcessingInstruction, DocumentFragment, DocumentType, Notation, Entity, EntityReference都node的子类型

并不说说node(子类型)不能绑定事件,而是有些类型的node不可见,不支持事件绑定,

<html>
<head>
    <meta charset="utf-8">
    <title>无标题文档</title>
</head>

<body>
    <div >1213112</div>
    <script>
        var bodyelement= document.getElementsByTagName("body")[0];
        //bodyelement.childNodes[0] bodyelement.firstChild是一个文本节点
        for (var i = 0; i < bodyelement.childNodes.length; i++) {
           console.log(bodyelement.childNodes[i].nodeName);
        }
        //绑定事件到div上
        bodyelement.childNodes[1].addEventListener('click',function(event){
            console.log(event.target.tagName);//
        },false);
    </script>
</body>
</html>
推荐问题