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

  • 相关阅读:
    思科 ASA 系列防火墙 官方文档下载指南
    Batch批量替换hosts
    OPCDA通信--工作在透明模式下的CISCO ASA 5506-X防火墙配置
    OPC DA通讯 KEP6.4 DCOM 配置脚本
    拖放获取文件信息的bat代码
    禁用UpdateOrchestrator重新启动任务
    SIAMATIC S7-1200 中通过 Modbus RTU 如何读取地址范围 9999 到 65535 的输入字
    提问的智慧 (提问前必读)
    [AHK]输入法状态提示,中文状态提示“中”,英文状态提示“EN”[转]
    Wincc V7.3SE安装截图
  • 原文地址:https://www.cnblogs.com/zoubizhici/p/5589564.html
Copyright © 2020-2023  润新知