博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JS中的createElement(),createTextNode(),cloneNode()
阅读量:2189 次
发布时间:2019-05-02

本文共 2479 字,大约阅读时间需要 8 分钟。

DOM允许你创建自己的元素和文本节点,并把它们添加大文档树中。理论上上说,你可以从树中移除所有的元素,创建新元素,或者重整文档树,从而完全改变页面。但是在实践中,这个特性用起来有些限制。DOM也允许你克隆现有的元素,已便你能方便地复制文档的某一部分并在文档中分发副本。

createElement()和createTextNode()

createElement()和createTextNode()做的事情正如它们的名字所说的那样:
//创建一个li新元素  
var newChild=document.createElement('li');  
//创建一个a 新元素  
var newLink=document.createElement('a')  
//创建一个 Text 节点  
var newText=document.createTextNode('My Wiki');  
newChild指向新创建的<li>元素对象,newLink指向新创建的<a>元素对象,而newText指向新创建的文本节点对象。这些节点都还没有被插入文档中。常用appendChild()或insertBefore()将它们附加到文档树中:
var nav=document.getElementById("nav");  
//创建一个li新元素  
var newChild=document.createElement('li');  
//创建一个a 新元素  
var newLink=document.createElement('a')  
//创建一个 Text 节点  
var newText=document.createTextNode('My Wiki');  
//把Text添加到a元素节点中  
newLink.appendChild(newText);  
//给a元素节点设置属性href和内容  
newLink.setAttribute('href',"#");  
//把a元素节点添加到新的li元素节点中  
newChild.appendChild(newLink);  
//把新的li元素节点添加到 ul 元素节点里  
nav.appendChild(newChild);  
这先将文本节点附加到<a>中,然后再将包含文本节点的<a>附加到<li>中,最后把包含<a>和文本的<li>附加到<ul>中。此时我的导航条ul中多了一个li子节点。
createTextNode()和HTML实体
createTextNode()有一个问题:它不能创建类似于&euro;(€ 欧元符号)&yen;(¥ 人民币符号) © (&copy; 版权符号)&#8220;(“左双引号)&#8221;(” 右双引号)等,这样的HTML实体元素。它会按字面创建文本,而不是创建你所需要的符号 。
<script  type="text/javascript"> 
window.οnlοad=function(){  
 var x=document.createTextNode("&copy; Copyrights reserved");  
 document.getElementById("test").appendChild(x);  
}  
</script>  
不过,我们可以使用innerHTML来代替:
<script  type="text/javascript"> 
window.οnlοad=function(){   
document.getElementById("test").innerHTML="&copy; 
Copyrights reserved";  
}  
</script> 

cloneNode()

cloneNode()方法克隆一个节点,即它能对节点做一个完美的复制,使你可以在随后将其插入到文档树中。导航条HTML代码:

<div id="menu"> 
    <h1>我的导航条</h1>            
    <ul id="nav"> 
       <li><a href="#">HOME</a></li> 
       <li><a href="#">(X)Html / Css</a></li> 
       <li><a href="#">Ajax / RIA</a></li> 
       <li><a href="#">GoF</a></li> 
       <li><a href="#">JavaScript</a></li> 
       <li><a href="#">JavaWeb</a></li> 
       <li><a href="#">jQuery</a></li> 
       <li><a href="#">MooTools</a></li> 
       <li><a href="#">Python</a></li> 
       <li><a href="#">Resources</a></li> 
    </ul> 
</div>  
测试cloneNode()
<script  type="text/javascript"> 
window.οnlοad=function(){  
     var nav_list=[];  
  var nav=document.getElementById("nav");  
     navnav_list=nav.getElementsByTagName("li");  
  var x=nav_list[0];  
  var y=x.cloneNode(true);  
  nav.appendChild(y);  
}  
</script> 
要想正确的使用cloneNode(),你必须了解它的一下二个特征:
1. cloneNode()接受一个可选值为true或false的参数。True 表示克隆元素和它的所有子节点。False表示克隆元素但不包含它的子节点。通常,我们在实践中用true,我从来没有遇到过想要克隆一个节点但不包含它的子节点的情形。
2. cloneNode()不会克隆事件处理程序。这相当的让人恼火,不知道这个方法是怎么定义的(原因我也不知道)所以每次你克隆一个节点,你不得不在克隆上重新定义事件处理程序。

转载地址:http://rlkub.baihongyu.com/

你可能感兴趣的文章
【LEETCODE】102-Binary Tree Level Order Traversal
查看>>
【LEETCODE】106-Construct Binary Tree from Inorder and Postorder Traversal
查看>>
【LEETCODE】202-Happy Number
查看>>
和机器学习和计算机视觉相关的数学
查看>>
十个值得一试的开源深度学习框架
查看>>
【LEETCODE】240-Search a 2D Matrix II
查看>>
【LEETCODE】53-Maximum Subarray
查看>>
【LEETCODE】215-Kth Largest Element in an Array
查看>>
【LEETCODE】241-Different Ways to Add Parentheses
查看>>
【LEETCODE】312-Burst Balloons
查看>>
【LEETCODE】232-Implement Queue using Stacks
查看>>
【LEETCODE】225-Implement Stack using Queues
查看>>
【LEETCODE】155-Min Stack
查看>>
【LEETCODE】20-Valid Parentheses
查看>>
【LEETCODE】290-Word Pattern
查看>>
【LEETCODE】36-Valid Sudoku
查看>>
【LEETCODE】205-Isomorphic Strings
查看>>
【LEETCODE】204-Count Primes
查看>>
【LEETCODE】228-Summary Ranges
查看>>
【LEETCODE】27-Remove Element
查看>>