ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

JavaScript的DOM操作(节点操作)

2021-04-13 20:56:18  阅读:134  来源: 互联网

标签:node appendChild 元素 DOM JavaScript var 操作 document 节点


 

1、创建节点
createElement()

var node = document.createElement(“div”);


没什么可说的,创建一个元素节点,但注意,这个节点不会被自动添加到文档(document)里。

2、创建文本节点
createTextNode()

var value = document.createTextNode(“text”);


创建一个文本节点,常用来往元素节点里添加内容,也不会自动添加到文档里。
很多人知道innerHTML,不知道这个方法,这个添加的是静态文本,如果插入的内容不带HTML格式,用createTextNode比innerHTML安全,而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。
同样,appendChild和insertBefore,如果是已存在节点,他们都会自动先删除原节点,然后移动到你指定的地方。
将节点移动到最前面的技巧:
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,只复制节点不要里面的内容,复制后的新节点,也不会被自动插入到文档,需要用到3和4的方法去插入。

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就知道了,ID是HTML文档中要求唯一的,name可以不是唯一,如checkbox、radio等地方会用到多个 input用同一个name来识别是否为同党。对了,getElementsByName(name)仅用于取得input、radio、 checkbox等元素,如<inputname="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">

           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>

 

 

标签:node,appendChild,元素,DOM,JavaScript,var,操作,document,节点
来源: https://blog.51cto.com/u_15166492/2704014

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有