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>

  • 相关阅读:
    springboot springcloud zuul 过滤器
    springboot springcloud eureka 熔断器
    javaweb servlet filter
    maven nexus 搭建私服(二)
    springboot springcloud zuul 网关入门
    springboot springcloud 配置中心
    springboot springcloud eureka 入门
    java rabbitmq
    java jvm调优
    maven nexus 搭建私服(一)
  • 原文地址:https://www.cnblogs.com/Knowledge-is-infinite/p/10823039.html
Copyright © 2011-2022 走看看