• JavaScript的DOM操作(节点操作)


    创建节点
    createElement()
    var node = document.createElement(“div”);
    没什么可说的,创建一个元素节点,但注意,这个节点不会被自动添加到文档(document)里。

    2
    、创建文本节点
    createTextNode()
    var value = document.createTextNode(“text”);
    创建一个文本节点,常用来往元素节点里添加内容,也不会自动添加到文档里。
    很多人知道innerHTML,不知道这个方法,这个添加的是静态文本,如果插入的内容不带HTML格式,用createTextNodeinnerHTML安全,而innerText又有浏览器不兼容的问题,因此用createTextNode很好使。

    3
    、插入节点到最后
    appendChild()
    node.appendChild(value);
    将节点插入到最后,上面两个创建的节点不会自动添加到文档里,所以就要使appendChild来插入了。
    如果是新的节点是插入到最后,而如果是已经存在的节点则是移动到最后,这点很多人注意不到,理解了这点,再和下面的方法结合,可以方便的移动操作节点。

    4
    、插入节点到目标节点的前面
    insertBefore()
    var node = document.createElement(“div”);
    var _p = document.createElement(“p”);
    var _span = document.createElement(“span”);
    node.appendChild(_p);
    node.insertBefore(_span, _p);
    <span>
    节点在<p>节点前面插入,其中第二个参数是可选,如果第二个参数不写,将默认添加到文档的最后,相当于appendChild
    同样,appendChildinsertBefore,如果是已存在节点,他们都会自动先删除原节点,然后移动到你指定的地方。
    将节点移动到最前面的技巧:
    if (node.parentNode.firstChild)

    node.parentNode.insertBefore(node, node.parentNode.firstChild);
    else node.parentNode.appendChild(node);

    5
    、复制节点
    cloneNode(boolean)
    node.cloneNode(true);
    node.cloneNode(false);
    复制上面的div节点,参数true,复制整个节点和里面的内容;false,只复制节点不要里面的内容,复制后的新节点,也不会被自动插入到文档,需要用到34的方法去插入。

    6
    、删除节点
    removeChild()
    node.removeChild(_p);
    把上面的<p>节点从<div>里删除。不过一般情况下,不知道要删除的节点的父节点是什么,因此一般这么使:node.parentNode.removeChild(node);

    7
    、替换节点
    repalceChild(newNode, oldNode)
    node.repalceChild(_p, _span);
    把上面的<span>节点替换成<p>节点,注意无论是<span>还是<p>,都必须是<div>的子节点,或是一个新的节点。

    8
    、设置节点属性
    setAttribute()
    node.setAttribute("title","abc");
    不解释了,很容易明白。就说一句,用这个方法设置节点属性兼容好,但class属性不能这么设置。

    9
    、获取节点属性
    getAttribute()
    node.getAttribute("title");
    8,获取节点属性。

    10
    、判断元素是否有子节点
    hasChildNodes
    node.hasChildNodes;
    返回boolean类型,因此将新节点插入到最前面的技巧:
    var node = document.createElement(“div”);
    var newNode = document.createElement(“p”);
    if (node.hasChildNodes) node.insertBefore(newNode, node.firstChild);
    else node.appendChild(node);


    最后是DOM的属性:

    nodeName - 
    节点的名字;
    nodeType - 
    返回一个整数,代表这个节点的类型,1-元素节点,2-属性节点,3-文本节点;
    nodeValue - 
    返回一个字符串,这个节点的值;
    childNodes - 
    返回一个数组,数组由元素节点的子节点构成;
    firstChild - 
    返回第一个子节点;
    lastChild - 
    返回最后一个子节点;
    nextSibling - 
    返回目标节点的下一个兄弟节点,如果目标节点后面没有同属于一个父节点的节点,返回null
    previousSibling - 
    返回目标节点的前一个兄弟节点,如果目标节点前面没有同属于一个父节点的节点,返回null
    parentNode - 
    返回的节点永远是一个元素节点,因为只有元素节点才有可能有子节点,document节点将返回null

     



     

     

    javaScript操作DOM 建立增加删除克隆访问节点示例:

     

    1.   getElementById(id)     

     这是通过id来访问某一元素,最常用的之一,例: 

        

    <html>

            <body>

            <div id="myid">

            test

            </div>

            <script language="javascript">

             alert(document.getElementById("myid").innerHTML);

            </script>

            </body>

    </html>

     

     注意点:如果元素的ID不是唯一,则会取得第一个该ID名称的元素  

     

    2.   getElementsByName(name)     

     

    这是通过name来取得某一堆元素(作为数组),看 Element后面有个小s就知道了,IDHTML文档中要求唯一的,name可以不是唯一,如checkboxradio等地方会用到多个 input用同一个name来识别是否为同党。对了,getElementsByName(name)仅用于取得inputradio checkbox等元素,如<inputname="myradio" type="radio" />  

     

    3. getElementsByTagName(tagname) 看这方法就知道这也是取得某一堆元素(作为数组),是通过TagName也就是标签名来取得。你可以遍历这个数组获得每一个单独的元素。当一个DOM结构很大时,可以通过它来有效地缩小搜查范围。     

    <html>       

     <head>

         <script>

            function test()

    {

            testall=document.getElementsByTagName("body");

            testbody=testall.item(0);

     //获得所有tagNamebody的元素(当然每个页面只有一个)

            testall=testbody.getElementsByTagName("p");

    // 获得body子元素种的所有P元素

            testnode=testall.item(1);

         // 获得第二个P元素     

         alert(testnode.firstChild.nodeValue);

    //显示这个元素的文本     

        }

            </script>

           </head>

           <body>

           <p>hi</p>

           <p>hello</p>

       <script language="javascript">

            test();

       </script>

            </body>

            </html>

       
    4. appendChild(node)


          
    向当前的元素(应该叫对象比较恰当)追加节点。     

    <html>

            <body>

            <head>

            </head>

            <div id="test"></div>

            <script type="text/javascript">

               varnewdiv=document.createElement("div")

               varnewtext=document.createTextNode("A newdiv")        

    newdiv.appendChild(newtext)

              document.getElementById("test").appendChild(newdiv)

            </script>

            </body>

             </html>

    刚才我在第一个例子中为了显示出内容,用了innerHTML,刚才看到文章才得知innerHTMl不属于DOM 

     

    5. removeChild(childreference)

    删除当前节点的子节点,返回被删除的节点。
    这个被删除的节点可以被插入到别的地方

    <html>

            <body>

            <div id="parent"><div id="child">Achild</div></div>

       <script language="javascript">

        varchildnode=document.getElementById("child")

       varremovednode=document.getElementById("parent").removeChild(childnode)

    </script>

            </body>

            </html>

     

    6. cloneNode(deepBoolean)

    复制并返回当前节点的复制节点,复制节点是一个孤立节点,它复制了原节点的属性,在把这个新节点加入到document前,根据需要修改ID属性确保其ID的唯一。

    这个方法支持一个布尔参数,当deepBoolean设置true时,复制当前节点的所有子节点,包括该节点内的文本。

    <html>

            <body>

            <p id="mynode">test</p>

            <script language="javascript">

            p=document.getElementById("mynode")

            pclone =p.cloneNode(true);

            p.parentNode.appendChild(pclone);

            </script>

            </body>

            </html>

    7. replaceChild(newChild, oldChild)

    把当前节点的一个子节点换成另一个节点

    <html>

            <body>

            <div id="mynode2">

            <span id="orispan">span</span>

            </div>

            <script language="javascript">

            var orinode=document.getElementById("orispan");

            var newnode=document.createElement("p");

            var text=document.createTextNode("test ppp ");

            newnode.appendChild(text);

             document.getElementById("mynode2").replaceChild(newnode,orinode);

            </script>

            </body>

    </html>

     

     

     

     

     

     

     

    javaScript操作DOM 建立 增加 删除 克隆 访问节点示例:

     

     

    1. getElementById(id)      这是通过id来访问某一元素,最常用的之一,例:     

    <html>

             <body>

             <div id="myid">

             test

             </div>

             <script language="javascript">

             alert(document.getElementById("myid").innerHTML);

             </script>

             </body>

    </html>

          注意点:如果元素的ID不是唯一,则会取得第一个该ID名称的元素  

    2. getElementsByName(name)      这是通过name来取得某一堆元素(作为数组),看 Element后面有个小s就知道了,ID是HTML文档中要求唯一的,name可以不是唯一,如checkbox、radio等地方会用到多个 input用同一个name来识别是否为同党。对了,getElementsByName(name)仅用于取得input、radio、 checkbox等元素,如<input name="myradio" type="radio" />  

    3. getElementsByTagName(tagname) 看这方法就知道这也是取得某一堆元素(作为数组),是通过TagName也就是标签名来取得。你可以遍历这个数组获得每一个单独的元素。当一个DOM结构很大时,可以通过它来有效地缩小搜查范围。     

    <html>         <head>

             <script>

             function test() {

             testall=document.getElementsByTagName("body");

             testbody=testall.item(0); //获得所有tagName是body的元素(当然每个页面只有一个)

             testall=testbody.getElementsByTagName("p");// 获得body子元素种的所有P元素

             testnode=testall.item(1); // 获得第二个P元素         alert(testnode.firstChild.nodeValue); //显示这个元素的文本         }

             </script>

             </head>

             <body>

             <p>hi</p>

             <p>hello</p>

             <script language="javascript">

             test();

             </script>

             </body>

             </html>

       
    4. appendChild(node)
          向当前的元素(应该叫对象比较恰当)追加节点。     

    <html>

             <body>

             <head>

             </head>

             <div id="test"></div>

             <script type="text/javascript">

             var newdiv=document.createElement("div")

             var newtext=document.createTextNode("A new div")         newdiv.appendChild(newtext)

             document.getElementById("test").appendChild(newdiv)

             </script>

             </body>

             </html>

          刚才我在第一个例子中为了显示出内容,用了innerHTML,刚才看到文章才得知innerHTMl不属于DOM。  

    5. removeChild(childreference)

    删除当前节点的子节点,返回被删除的节点。
    这个被删除的节点可以被插入到别的地方

    <html>

             <body>

             <div id="parent"><div id="child">A child</div></div>

             <script language="javascript">

             var childnode=document.getElementById("child")

             var removednode=document.getElementById("parent").removeChild(childnode)

             </script>

             </body>

             </html>

    6. cloneNode(deepBoolean)

    复制并返回当前节点的复制节点,复制节点是一个孤立节点,它复制了原节点的属性,在把这个新节点加入到document前,根据需要修改ID属性确保其ID的唯一。

    这个方法支持一个布尔参数,当deepBoolean设置true时,复制当前节点的所有子节点,包括该节点内的文本。

    <html>

             <body>

             <p id="mynode">test</p>

             <script language="javascript">

             p=document.getElementById("mynode")

            pclone = p.cloneNode(true);

             p.parentNode.appendChild(pclone);

             </script>

             </body>

             </html>

    7. replaceChild(newChild, oldChild)

    把当前节点的一个子节点换成另一个节点

    <html>

             <body>

             <div id="mynode2">

             <span id="orispan">span</span>

             </div>

             <script language="javascript">

             var orinode=document.getElementById("orispan");

             var newnode=document.createElement("p");

             var text=document.createTextNode("test ppp ");

             newnode.appendChild(text);

             document.getElementById("mynode2").replaceChild(newnode, orinode);

             </script>

             </body>

    </html>

  • 相关阅读:
    CSS不常见问题汇总
    Android 学习 查询数据库
    c#判断QQ是否在线
    Log图文详解(Log.v,Log.d,Log.i,Log.w,Log.e)的用法
    android之uses-permission
    Android特效 五种Toast详解
    Android用Intent启动Activity的方法
    View的setOnClickListener的添加方法
    Handler
    在Android中使用 Google ZXing 实现二维码、条形码扫描
  • 原文地址:https://www.cnblogs.com/j-king/p/3747688.html
Copyright © 2020-2023  润新知