• JavaScript DOM实战:创建和克隆元素


    DOM来创建和克隆元素。

    createElement()和createTextNode()

    createElement()和createTextNode()做的事情正如它们的名字所说的那样。最常见的JavaScript DOM方法实战-修改文档树中已经用过它们。当时的目的是把新创建的元素添加到文档树里,使它成为某个元素的最后一个子节点。

    1. //创建一个li新元素

    2. var newChild=document.createElement('li');

    3. //创建一个a 新元素

    4. var newLink=document.createElement('a')

    5. //创建一个 Text 节点

    6. var newText=document.createTextNode('My Wiki');

    newChild指向新创建的<li>元素对象,newLink指向新创建的<a>元素对象,而newText指向新创建的文本节点对象。这些节点都还没有被插入文档中。最常见的JavaScript DOM方法实战-修改文档树中,用到的appendChild()或insertBefore()将它们附加到文档树中。例如:

    1. var nav=document.getElementById("nav");

    2. //创建一个li新元素

    3. var newChild=document.createElement('li');

    4. //创建一个a 新元素

    5. var newLink=document.createElement('a')

    6. //创建一个 Text 节点

    7. var newText=document.createTextNode('My Wiki');

    8. //把Text添加到a元素节点中

    9. newLink.appendChild(newText);

    10. //给a元素节点设置属性href和内容

    11. newLink.setAttribute('href',"#");

    12. //把a元素节点添加到新的li元素节点中

    13. newChild.appendChild(newLink);

    14. //把新的li元素节点添加到 ul 元素节点里

    15. nav.appendChild(newChild);

    这先将文本节点附加到<a>中,然后再将包含文本节点的<a>附加到<li>中,最后把包含<a>和文本的<li>附加到<ul>中。此时我的导航条ul中多了一个li子节点。

    createTextNode()和HTML实体

    createTextNode()有一个问题:它不能创建类似于&euro;(€ 欧元符号)&yen;(¥ 人民币符号) © (&copy; 版权符号)&#8220;(“左双引号)&#8221;(” 右双引号)等,这样的HTML实体元素。它会按字面创建文本,而不是创建你所需要的符号 。

    1. <script type="text/javascript">

    2. window.onload=function(){

    3. var x=document.createTextNode("&copy; Copyrights reserved");

    4. document.getElementById("test").appendChild(x);

    5. }

    6. </script>

    不过,我们可以使用innerHTML来代替:

    1. <script type="text/javascript">

    2. window.onload=function(){

    3. document.getElementById("test").innerHTML="&copy;

    4. Copyrights reserved";

    5. }

    6. </script>

    关于innerHTML属性的用法,我们会在下一节中作为专题来具体的讨论。

    cloneNode()

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

    1. <div id="menu">

    2. <h1>我的导航条</h1>

    3. <ul id="nav">

    4. <li><a href="#">HOME</a></li>

    5. <li><a href="#">(X)Html / Css</a></li>

    6. <li><a href="#">Ajax / RIA</a></li>

    7. <li><a href="#">GoF</a></li>

    8. <li><a href="#">JavaScript</a></li>

    9. <li><a href="#">JavaWeb</a></li>

    10. <li><a href="#">jQuery</a></li>

    11. <li><a href="#">MooTools</a></li>

    12. <li><a href="#">Python</a></li>

    13. <li><a href="#">Resources</a></li>

    14. </ul>

    15. </div>

    测试cloneNode()

    1. <script type="text/javascript">

    2. window.onload=function(){

    3. var nav_list=[];

    4. var nav=document.getElementById("nav");

    5. navnav_list=nav.getElementsByTagName("li");

    6. var x=nav_list[0];

    7. var y=x.cloneNode(true);

    8. nav.appendChild(y);

    9. }

    10. </script>

    要想正确的使用cloneNode(),你必须了解它的一下二个特征:

    1. cloneNode()接受一个可选值为true或false的参数。True 表示克隆元素和它的所有子节点。False表示克隆元素但不包含它的子节点。通常,我们在实践中用true,我从来没有遇到过想要克隆一个节点但不包含它的子节点的情形。

    2. cloneNode()不会克隆事件处理程序。这相当的让人恼火,不知道这个方法是怎么定义的(原因我也不知道)所以每次你克隆一个节点,你不得不在克隆上重新定义事件处理程序。

  • 相关阅读:
    Maven 环境的配置
    zTree的简单例子
    plsql免安装客户端的配置
    HDU 1232 畅通工程
    HDU 5698 瞬间移动
    Codeforces 1015E1 Stars Drawing (Easy Edition)
    Codeforces 784B Santa Claus and Keyboard Check
    Codeforces 500C New Year Book Reading
    NSarray 赋值 拷贝 等问题记录
    UINavigationController 操作记录
  • 原文地址:https://www.cnblogs.com/zoubizhici/p/5589564.html
Copyright © 2020-2023  润新知