DOM初体验(节点元素操作)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DOM初体验(节点元素操作)相关的知识,希望对你有一定的参考价值。

 

1.1、     创建元素

Document.write

使用这个方法可以向页面上动态地添加元素

 

缺点:

在页面加载完成之后再使用这个方法,会覆盖原来的内容

 1 <input type="button" value="点击向body里面添加元素" id="btn"/>
 2 <script>
 3 //        document.write()
 4         var div = "<div>内容</div>";
 5     document.getElementById("btn").onclick =function (){
 6         //通过一个标签格式的字符串,向body里面输出,被解析成为标签
 7         //注意点:
 8 //如果使用这个方式,发现,在后面添加的元素,会直接成为body的子元素,并且把原来body里面的内容覆盖了
 9         document.write(div);
10     }
11 </script>

 

InnerHTML

使用这个方法可以向任意元素动态地添加子元素

 

缺点:

一般来说都要频繁的拼接字符串,而且会覆盖掉元素中原来的内容

<input type="button" value="点击使用innerhtml向元素中添加内容" id="btn2"/>
<script>
//element.innerHTML=标签格式的字符串
var btn2 = document.getElementById("btn2");
//往id为content的div里添加元素
//也会覆盖掉原本在标签里面的内容
btn2.onclick = function () {
    var html = "<div><a href=‘#‘>文字</a></div>";
    document.getElementById("content").innerHTML = html;
}
//如果使用innerHTML来完成一个大的结构,可能需要频繁的拼接字符串
</script>

 

Document.createElement

使用这个方法可以创建任意元素

<input type="button" value="点击创建p标签" id="btn2">

<script>

//语法:document.createElement(标签名称)
$id("btn2").onclick = function () {
    var p = document.createElement("p");
    setInnerText(p, "哈哈")
    $id("box").appendChild(p);
}

</script>

 

 

特点:

使用这个方法创建的元素,只是在内存中创建不会自动添加到页面,也没有任何的内容,只有一个节点对象。如果要把创建的元素显示在页面上,需要追加元素或者插入元素

 

1.2、     追加元素

Parent.appendChild(node)

使用这个方法可以向某个父元素的末尾追加一个新的子元素

<ul id="ul1">
    <li>我是第一个ul的第1li</li>
    <li>我是第一个ul的第2li</li>
    <li>我是第一个ul的第3li</li>
    <li>我是第一个ul的第4li</li>
    <li>我是第一个ul的第5li</li>
    <li>我是第一个ul的第6li</li>
</ul>
<ul id="ul2">
    <li>我是第二个ul的第1li</li>
    <li>我是第二个ul的第2li</li>
    <li>我是第二个ul的第3li</li>
    <li>我是第二个ul的第4li</li>
    <li>我是第二个ul的第5li</li>
    <li>我是第二个ul的第6li</li>
</ul>
<script>
    var ul1 = document.getElementById("ul1");
    var ul2 = document.getElementById("ul2");
    var ul3 = ul1.children[2];
    //如果是a元素的子元素被追加到b元素中,a元素中的子元素会消失,跑到b元素的最后去
    ul2.appendChild(ul3);
    //凡是引用传参,修改的都是堆空间中的对象
</script>

 

1.3、     克隆元素

Node.cloneNode(deep)

使用这个方法可以克隆某个元素到内存中,只能得到一个节点对象,不会自动添加到页面中

 

这个方法接受一个boolean类型的参数,决定是否对这个元素进行深度克隆

True  深度克隆  克隆当前元素和所有的子元素

False  浅度克隆  只克隆当前元素(默认)

 

注意:这个方法会克隆元素的属性,如果这个元素中有id属性,id属性会重复,所以克隆元素的id属性需要重新赋值

 

1.4、     插入元素

Parent.insertBefore(newNode,oldNode)

这个访求可以向某个父元素指定的位置插入一个新的子元素

 

这个方法接收两个参数,要插入的新元素和指定位置的元素

注意:使用这个方法的时候,指定位置的元素一定要是调用这个方法的元素的子元素

<ul id="ul1">
    <li>我是第一个ul的第1li</li>
    <li>我是第一个ul的第2li</li>
    <li>我是第一个ul的第3li</li>
    <li>我是第一个ul的第4li</li>
    <li>我是第一个ul的第5li</li>
    <li>我是第一个ul的第6li</li>
</ul>
<ul id="ul2">
    <li>我是第二个ul的第1li</li>
    <li>我是第二个ul的第2li</li>
    <li>我是第二个ul的第3li</li>
    <li>我是第二个ul的第4li</li>
    <li>我是第二个ul的第5li</li>
    <li>我是第二个ul的第6li</li>
</ul>
<input type="button" value="点击" id="btn">
<script>
//插入元素
    //语法:parentNode.insertBefore(newNode,oldNode)
    var ul1=document.getElementById("ul1");
    var li=document.createElement("li");
    li.innerHTML="我是新建的li元素";
    var oldChild=ul.children[3];
    //第一种用法:将一个新建的或者复制的元素,插入到原来的元素之前
    ul1.insertBefore(li,oldChild);

    document.getElementById("btn").onclick=function () {
        //第二种用法:将已经存在结构中的元素,插入到另一个元素之前
        var ulli5=ul1.children[4];
        var ulli6=ul1.children[5];
        ul1.insertBefore(ulli6,ulli5);
    }
    //第三种用法:在不同的父元素之间,也是可以将子元素插入另一个父元素的
    var ul2=document.getElementById("ul2");
    var ulli6=ul1.children[5];
    ul2.insertBefore(ulli6,ul2.children[0]);
</script>

 

1.5、     删除元素

Parent.removeChild(node)

这个方法可以删除某个指定的子元素

<input type="button" value="点击删除元素" id="btn">
<ul>
    <li>我是第1个li</li>
    <li>我是第2个li</li>
    <li>我是第3个li</li>
    <li>我是第4个li</li>
    <li>我是第5个li</li>
    <li>我是第6个li</li>
</ul>
<script>
    //删除元素语法:
    //parentNode.removeChild(childNode);
    var ul=document.body.children[1];
    document.getElementById("btn").onclick=function () {
        var li1=ul.children[0];
        ul.removeChild(li1);
    }
    //注意:此语法不能自杀,只能通过父元素把它干掉
</script>

 

1.6、     替换元素

Parent.replaceChild(newNode,oldNode)

这个方法可以将某个父元素的任意一个子元素替换为另外一个元素

 

这个方法接受两个参数,分别是新的元素和被替换的元素

<ul id="ul1">
    <li>我是第一个ul的第1li</li>
    <li>我是第一个ul的第2li</li>
    <li>我是第一个ul的第3li</li>
    <li>我是第一个ul的第4li</li>
    <li>我是第一个ul的第5li</li>
    <li>我是第一个ul的第6li</li>
</ul>
<ul id="ul2">
    <li>我是第二个ul的第1li</li>
    <li>我是第二个ul的第2li</li>
    <li>我是第二个ul的第3li</li>
    <li>我是第二个ul的第4li</li>
    <li>我是第二个ul的第5li</li>
    <li>我是第二个ul的第6li</li>
</ul>
<input type="button" value="点击替换" id="btn">
<input type="button" value="点击替换2" id="btn2">
<script>
    //替换元素
    //语法:parentNode.replaceChild(newNode,oldNode)
    //用newchild将oldchild替换掉,作为parentNode的第一个子元素
    //一般用法:都是用一个新建或者复制的节点,替换一个原来的节点
    var li=document.createElement("li");
    li.innerHTML="测试替换元素";
    var ul1=document.getElementById("ul1");
    var ulli1=ul1.children[0];
    document.getElementById("btn").onclick=function () {
        ul1.replaceChild(li,ulli1);
    }
    //尝试将已有的元素替换已有的元素
    document.getElementById("btn2").onclick=function () {
        var u2l2=document.getElementById("ul2").children[0];
        ul1.replaceChild(u2l2,ulli1);
    }
</script>

 

以上是关于DOM初体验(节点元素操作)的主要内容,如果未能解决你的问题,请参考以下文章

DOM初体验(样式设置)

JavaScript---1

jquery获取不到动态加载的dom元素是一种啥样的体验

DOM操作

DOM操作 ——如何添加移除移动复制创建和查找节点等。

DOM操作怎样添加移除移动复制。创建和查找节点?