zoukankan      html  css  js  c++  java
  • NodeList对象的特点

    nodeList对象的特点
    1,nodeList是一种类数组对象,用于保存一组有序的节点。
    2,通过方括号来访问nodeList的值,有item方法与length属性。
    3,它并不是Array的实例,没有数组对象的方法
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <script src="js/domready.js"></script><!--必须导入该文件,搜狗输入domready.js-->
        <script>
         
            myReady(function(){
                var div=document.getElementById('div');//获取div对象
                //获得节点列表(nodeList),这是属于操作DOM第一套API,所以会计算空文本节点,
                //(google chrome)显示:NodeList(5) [text, ul#ul1, text, ul#ul2, text]  text表示空文本节点
                //(firefox)显示:NodeList(5) [ #text, ul#ul1, #text, ul#ul2, #text ]  #text表示空文本节点
                //console.log(div.childNodes);
                //console.log(div.childNodes[0]);//通过方括号获取对象,如:获取第一个nodeList对象 #text(空文本节点)
                //console.log(div.childNodes[3]);//通过方括号获取对象,如:第三个对象 ul#ul2

                var ul=document.getElementById("ul1");//获取ul对象
                var nodeList=ul.childNodes;//获得ul下面的所有子节点对象列表 nodeList并不是一个数据类型。
                //alert(typeof nodeList);//返回的是 Object类型。
                /**
                 * 把nodeList转化为数组对象  可以兼容IE5以上,兼容性很好。
                 * @param  {object} nodeList 获取所有子元素对象列表
                 * @return {array}          [返回数组对象]
                 */
                function markArray(nodeList){//把nodeList转换成数组
                    /*var arr=new Array();//创建新数组存放nodeList
                    for (var i = 0; i < nodeList.length; i++) {
                      arr[i]=nodeList[i];//把nodelist存放到数组中。
                    }
                    return arr;//返回数组*/
               


                    /**
                     * 非常高效的把nodeList转化为数组对象   IE8以及IE8以下不兼容
                     * @param  {object} nodeList 获取所有子节点列表对象
                     * @return {Array}          返回数组对象
                     */
                    /*function markArray(nodeList){//可以直接把nodeList直接转换成Array数组。
                      return Array.prototype.slice.call(nodeList);//可以直接把nodeList直接转换成Array数组。
                    }*/


                      //这个方法最好,通用方法:
                      var arr=null;//用于存放对象的变量,一般都给赋值null。其他可以赋值为""。
                      try{
                        return Array.prototype.slice.call(nodeList);//可以直接把nodeList直接转换成Array数组。IE8以及IE8以下不兼容
                      }catch(e){
                        arr=new Array();//不要定义在不需要的作用域。
                        for (var i = 0; i < nodeList.length; i++) {//可以兼容IE7以上,兼容性很好。
                          arr.push(nodeList[i]);//等于 arr[i]=nodeList[i]
                        }
                        return arr;
                      }
                }
                var newarray=markArray(nodeList);//把nodeList转换成数组,
                //console.log(markArray(nodeList));//输出数组对象:Array(7) [ #text, li#oneLi, #text, li#twoLi, #text, li#threeLi, #text ],查看是不是数组,可以在控制台点击,查看prototype(原型)这个属性:Array
                newarray.push("<h1>You are my sumshime!</h1>");//添加对象,返回的是数组的长度,而不是数组本身。
                console.log(newarray);//返回数组:(8) [text, li#oneLi, text, li#twoLi, text, li#threeLi, text, "<h1>You are my sumshime!</h1>"]  。h1这个节点只是被添加到newarray数组中,并没有添加到dom树中去。
            })
        </script>
    </head>
    <body id="body">
        <div id="div">
            <ul id="ul1">
                <li id="oneLi"><a href="">1111</a><a href="" id="onea">22222</a><span id="span1"> </span> <span id="span2"></span></li>
                <li id="twoLi"><a href="">4444</a><a href="" >5555</a><a href="">6666</a></li>
                <li id="threeLi"><a href="">7777</a><a href="" >8888</a><a href="">9999</a></li>
            </ul>
            <ul id="ul2">
                <li></li>
                <li></li>
                <li></li>
            </ul>
        </div>
    </body>

    ============以下是第一种操作DOM的API,会把空文本节点计算在内。相比下面的第二套API兼容性会好点=========================
    //在控制台获取对象时:点击所获取的对象在firefox中显示各种属性,在chrome中是显示其子元素以及孙子元素的所有内容。
    DOM节点操作,标签之间的换行空文本节点在IE浏览器和firefox火狐浏览器中会读取,其他浏览器不会读取,需要兼容性方法,见搜狗:遍历节点
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <script src="js/domready.js"></script><!--必须导入该文件,搜狗输入domready.js-->
        <script>
          //===========================这里获得的所有对象都是可以点开查看各种属性=============================
            myReady(function(){
                var ul=document.getElementById('ul1');
                var li1=document.getElementById("one");
                var li2=document.getElementById("two");
                var li3=document.getElementById("three");
                //console.log(document.childNodes[0]);//获取文档第一个子节点:<!DOCTYPE html>对象 ,点开可以看到各种属性及属性值(火狐),在谷歌中显示的是:所获取对象下面的所有子元素内容。
                //console.log(document.firstChild);//获取文档第一个子节点:<!DOCTYPE html>对象 ,点开可以看到各种属性及属性值(火狐),在谷歌中显示的是:所获取对象下面的所有子元素内容。
                //console.log(document.childNodes.item(0));//获取文档第一个子节点:<!DOCTYPE html>对象 ,点开可以看到各种属性及属性值(火狐),在谷歌中显示的是:所获取对象下面的所有子元素内容。
                //console.log(document.childNodes[0].tagName);//获取文档第一个子节点:<!DOCTYPE html>对象的标签名称:undefined
                //console.log(document.firstChild.tagName);//获取文档第一个子节点:<!DOCTYPE html>对象的标签名称:undefined

                //console.log(document.documentElement);//文档根节点:html对象,点开可以看到各种属性及属性值
                //console.log(document.documentElement.tagName);//html标签名称
                
                //console.log(document.documentElement.firstChild);//获取HTML的第一个子节点:head对象,点开可以看到各种属性及属性值(火狐),在谷歌中显示的是:所获取对象下面的所有子元素内容。
                //console.log(document.documentElement.lastChild);//获取HTML的最后一个子节点:body对象,点开可以看到各种属性及属性值(火狐),在谷歌中显示的是:所获取对象下面的所有子元素内容。
                //console.log(document.documentElement.firstChild.tagName);//获取HTML的第一个子节点的标签名称:head
                //console.log(document.documentElement.lastChild.tagName);//获取HTML的最后一个子节点的标签名称:body

                var ul=document.getElementById("ul1");
                //获得第一个和最后一个子节点有三种方式:
                //console.log(ul.firstChild);//空文本子节点
                //console.log(ul.childNodes[0]);//空文本子节点
                //console.log(ul.childNodes.item(0));//空文本子节点
                
                var ul=document.getElementById("ul1");
                //获得除了第一个和最后一个之外的节点有两种方式:
                //console.log(ul.childNodes[1]);
                //console.log(ul.childNodes.item(1));

                var li=document.getElementById("twoLi");//获取li对象
                //console.log(li.tagName);//获得li标签的名称
                //console.log(li.nextSibling);//因为下面每个li都有换行,所以左右兄弟节都是空文本节点,所以这里显示:#text,谨记。
                //console.log(li.previousSibling);//因为下面每个li都有换行,所以左右兄弟节都是空文本节点,所以这里显示:#text,谨记。
                
                var a=document.getElementById("onea");//获取a对象
                //console.log(a.nextSibling);//获取下一个兄弟对象: <span>333</span>
                //console.log(a.previousSibling);//获取上一个兄弟对象: <a href="">1111</a>

                var ul=document.getElementById("ul1");//获取ul对象
                var a=document.getElementById("onea");//获取a对象
                //console.log(ul.parentNode);//获得父节点  div
                //console.log(a.parentNode);//获得父节点  li

                var ul=document.getElementById("ul1");//获取ul对象
                var a=document.getElementById("onea");//获取a对象
                //console.log(ul.ownerDocument===document);
                //console.log(ul.ownerDocument===document);
                //console.log(document);//显示:HTMLDocument file:///D:/%E5%89%8D%E7%AB%AF%E5%BC%80%E5%8F%91/HTML/%E4%BD%9C%E4%B8%9A%E7%B4%A0%E6%9D%90/textTwo.html  表示获取该文件的绝对路径。

                var ul=document.getElementById("ul1");//获取ul对象
                var a=document.getElementById("onea");//获取a对象
                var span1=document.getElementById("span1");//获取span对象
                var span2=document.getElementById("span2");//获取span对象
                console.log(ul.hasChildNodes());//返回:true. 有3个li子节点
                console.log(a.hasChildNodes());//返回:true.  有"2222"文本子节点
                console.log(span1.hasChildNodes());//返回:true 有空文本子节点,即:有一个空格
                console.log(span2.hasChildNodes());//返回:false 没有节点
            })
        </script>
    </head>
    <body id="body">
        <div id="div">
            <ul id="ul1">
                <li id="oneLi"><a href="">1111</a><a href="" id="onea">22222</a><span id="span1"> </span> <span id="span2"></span></li>
                <li id="twoLi"><a href="">4444</a><a href="" >5555</a><a href="">6666</a></li>
                <li id="threeLi"><a href="">7777</a><a href="" >8888</a><a href="">9999</a></li>
            </ul>
            <ul id="ul2">
                <li></li>
                <li></li>
                <li></li>
            </ul>
        </div>
    </body>



    //===========================以下是第二种操作DOM的API,忽略空文本节点。不兼容IE8及其以下=============================
    //在控制台获取对象时:点击所获取的对象在firefox中显示各种属性,在chrome中是显示其子元素以及孙子元素的所有内容。
    //第二套API是比较专门针对文本DOM节点进行开发的,所以每个属性都带有element(元素),除了children[i]
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <script src="js/domready.js"></script><!--必须导入该文件,搜狗输入domready.js-->
        <script>
          
            myReady(function(){
                var div=document.getElementById('div');//获取div对象
                //console.log(div.childElementCount);//获取div的子节点个数,孙子节点不管。

                var ul1=document.getElementById("ul1");//获取ul1对象
                //console.log(ul1.firstElementChild);//获取第一个子元素,点击在FF中显示各种属性,在chrome中是显示其子元素以及孙子元素的所有内容。
                //console.log(ul1.lastElementChild);//获取最后一个子元素,点击在FF中显示各种属性,在chrome中是显示其子元素以及孙子元素的所有内容。

                var a=document.getElementById("onea");//获取a对象
                //console.log(a.nextElementSibling);//获取id=onea 标签的下一个兄弟元素
                //console.log(a.previousElementSibling);//获取id=onea 标签的前面一个兄弟元素

                var ul1=document.getElementById("ul1");//获取ul对象
                console.log(ul1.children[0]);//获取id=ul1的第一个子元素,忽略所有空文本节点
                console.log(ul1.children[1]);//获取id=ul1的第二个子元素,忽略所有空文本节点
                console.log(ul1.children[2]);//获取id=ul1的第三个子元素,忽略所有空文本节点
            })
        </script>
    </head>
    <body id="body">
        <div id="div">
            <ul id="ul1">
                <li id="oneLi"><a href="">1111</a><a href="" id="onea">22222</a><span id="span1"> </span> <span id="span2"></span></li>
                <li id="twoLi"><a href="">4444</a><a href="" >5555</a><a href="">6666</a></li>
                <li id="threeLi"><a href="">7777</a><a href="" >8888</a><a href="">9999</a></li>
            </ul>
            <ul id="ul2">
                <li></li>
                <li></li>
                <li></li>
            </ul>
        </div>
    </body>

  • 相关阅读:
    机电传动控制第五周学习笔记
    机电传动控制第四周学习笔记和仿真作业
    第三周学习笔记
    《机电传动控制》第二周作业
    学习笔记第一周
    第十周作业
    第八周仿真作业
    第六周学习笔记
    第五周作业
    机电传动控制第四周作业
  • 原文地址:https://www.cnblogs.com/Knowledge-is-infinite/p/10823039.html
Copyright © 2011-2022 走看看