3.4.6 操作DOM节点的相关方法
在DOM
操作中最常见的操作就是对节点的操作,包括创建节点
、复制节点
、插入节点
和删除节点
等,而jQuery
也提供了大量相关方法来简化对DOM
节点的操作。
1.在指定节点内插入新节点
插入新节点的方法
以下方法都用于在指定节点内插入新节点。
在当前jQuery内部插入其他元素
方法 |
描述 |
append(content) |
在jQuery 对象包含的所有DOM 节点内的尾部插入content 内容。其中content 既可以是HTML 字符串,也可以是DOM 元素,还可以是jQuery 对象。 |
append(function(index,html)) |
使用function(index,html) 函数迭代处理jQuery 所包含的每个节点,在每个节点的尾部依次插入function(index,html) 函数的返回值。function(index,html) 函数中的index 、html 参数表示当前正在被迭代处理的DOM 节点的索引 和DOM 节点内容。 |
prepend(content) |
在jQuery 对象包含的所有DOM 节点内的顶部插入content 内容,其中content 既可以是HTML 字符串,也可以是DOM 元素,还可以是jQuery 对象。 |
prepend(function(index,html)) |
使用function(index ,html) 函数迭代处理jQuery 所包含的每个节点,在每个节点的顶部依次插入function(index,html) 函数的返回值。function(index ,html) 函数中的index 、html 参数表示当前正在被迭代处理的DOM 节点的索引和DOM 节点内容。 |
把当前jQuery对象插入其他元素内部
方法 |
描述 |
appendTo(selector) |
将当前jQuery 对象包含的DOM 元素添加到与selector 匹配的所有DOM 内部的尾端。 |
prependTo(selector) |
将当前jQuery 对象包含的DOM 元素添加到与selector 匹配的所有DOM 的内部的顶端。 |
append方法和appendTo方法的区别
append()
方法是在当前jQuery
对象内部插入其他元素;
appendTo()
方法是将当前jQuery
对象插入到其他元素内部。A.append(B)
的作用与B.appendTo(A)
的作用类似。
程序示例
下面的程序示范了这些方法的功能。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| <!DOCTYPE html> <html>
<head> <meta name="author" content="Yeeku.H.Lee(CrazyIt.org)" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title> 添加HTML节点 </title> </head>
<body> <div id="test1"> test1 </div> <div id="test2" style="border:1px solid black;">id为test2的元素</div> <script type="text/javascript" src="../jquery-3.1.1.js"> </script> <script type="text/javascript"> $("#test1").append("<b>疯狂XML讲义</b>"); var span = document.createElement("span"); span.innerHTML = "疯狂Java讲义" $("#test1").prepend(span);
$("#test1").appendTo("#test2"); </script> </body>
</html>
|
如果使用append(function(index,html))
、prepend(function(index,html))
方法则可以为不同元素添加不同的内容,例如下面的页面代码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| <!DOCTYPE html> <html>
<head> <meta name="author" content="Yeeku.H.Lee(CrazyIt.org)" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title> 添加HTML节点 </title> </head>
<body> <div>1.</div> <div>2.</div> <div>3.</div> <script type="text/javascript" src="../jquery-3.1.1.js"> </script> <script type="text/javascript"> var books = [ { name: "疯狂Java讲义", price: 109 }, { name: "轻量级Java EE企业应用实战", price: 89 }, { name: "疯狂Android讲义", price: 89 }] $("body>div").append(function (i) { return "<b>书名是《" + books[i].name + "》,价格是:" + books[i].price; }); </script> </body>
</html>
|
2.在指定节点外添加节点
以下方法用于在目标节点的前后添加新节点。
把新节点插入到当前jQuery对象的前后
方法 |
描述 |
after(content) |
在该jQuery 对象包含的所有DOM **节点之后添加content **内容。其中content 既可以是HTML 字符串,也可以是DOM 对象,还可以是jQuery 对象。 |
after(function(index)) |
使用function(index) 函数迭代处理jQuery 所包含的每个节点,**在每个节点的后面依次添加function(index) 函数的返回值 **。function(index) 函数中的index 参数表示当前正在被迭代处理的DOM 节点的索引。 |
before(content) |
在该jQuery 对象包含的所有DOM **节点之前添加content **内容。其中content 既可以是HTML 字符串,也可以是DOM 对象,还可以是jQuery 对象。 |
before(function(index)) |
使用function(index) 函数迭代处理jQuery 所包含的每个节点,**在每个节点的前面依次添加function(index) 函数的返回值 **。function(index) 函数中的index 参数表示当前正在被迭代处理的DOM 节点的索引。 |
把jQuery对象插入到其他元素的前后
方法 |
描述 |
insertAfter(selector) |
将当前jQuery 对象包含的所有DOM 节点插入到与selector 匹配的所有节点之后。 |
insertBefore(selector) |
将当前jQuery 对象包含的所有DOM 节点插入到与selector 匹配的所有节点之前。 |
程序示例
下面的程序示范了以上几个插入方法的用法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| <!DOCTYPE html> <html>
<head> <meta name="author" content="Yeeku.H.Lee(CrazyIt.org)" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title> 插入HTML节点 </title> </head>
<body> <div id="test1" style="border:1px dotted black;">id为test1的元素</div> <br /> <div id="test2" style="border:1px solid black;">id为test2的元素</div> <hr /> <script type="text/javascript" src="../jquery-3.1.1.js"> </script> <script type="text/javascript"> $("#test1").before("<b>疯狂前端开发讲义</b>");
$("#test1").after("<b>疯狂XML讲义</b>");
$("#test2").insertAfter("hr");
$("body>div").before(function (i) { return "<div style='font-size:14pt'>" + i + "</div>"; }); </script> </body>
</html>
|
3.包裹
下面的方法可以将当前jQuery
对象里包含的DOM
节点包裹起来,也就是在这些DOM
节点之前插入开始标签,在其之后插入结束标签。
每个元素都包裹一次
方法 |
描述 |
wrap(wrappingElement) |
把jQuery 对象里的每个DOM 元素都进行包裹,jQuery 对象里有几个元素就包裹几次。其中node 既可以是有开始标签和结束标签的HTML 字符串,例如<div></div> ;也可以是这些标签所对应的DOM 元素。 |
wrap(function(index)) |
使用function(index) 函数迭代处理jQuery 所包含的每个节点。依次使用function(index) 函数的返回值来包裹jQuery 对象包含的每个节点。function(index) 函数中的index 参数表示当前正在被迭代处理的DOM 节点的索引。 |
所有的元素当成一个成体包裹一次
方法 |
描述 |
wrapAll(wrappingElement) |
将jQuery 对象里的所有DOM 元素当成一个整体进行包裹,不管jQuery 对象里有多少个DOM 元素都只包裹一次 |
包裹节点内部的一部分
方法 |
描述 |
wrapInner(wrappingElement) |
**包裹节点内部的一部分 **。 |
wrapInner(function(index)) |
使用function(index) 函数迭代处理jQuery 所包含的每个节点。依次使用function(index) 函数的返回值来包裹jQuery 对象包含的每个节点的内部成分(不是包裹节点的全部,而是仅包裹节点内部的部分)。function(index) 函数中的**index 参数表示当前正在被迭代处理的DOM 节点的索引**。 |
解除包裹
方法 |
描述 |
unwrap() |
该方法是wrap 方法的逆向操作,它会去除jQuery 对象中所有DOM 节点的父元素。 |
程序示例
下面的页面代码示范了包裹相关方法的用法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| <!DOCTYPE html> <html>
<head> <meta name="author" content="Yeeku.H.Lee(CrazyIt.org)" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title> 包裹HTML节点 </title> </head>
<body> <span id="test1">id为test1的元素</span> <br /> <span id="test2">id为test2的元素</span> <script type="text/javascript" src="../jquery-3.1.1.js"> </script> <script type="text/javascript"> $("span").wrap("<div style='border:1px dotted black'></div>"); $("span").wrapInner("<span style='background-color:#ddd'></span>"); </script> </body>
</html>
|
在浏览器中执行该页面代码可得到如下页面代码:
1 2 3 4 5 6 7 8 9 10 11
| <div style="border:1px dotted black"> <span id="test1"> <span style="background-color:#ddd">id为test1的元素</span> </span> </div> <br> <div style="border:1px dotted black"> <span id="test2"> <span style="background-color:#ddd">id为test2的元素</span> </span> </div>
|
4.替换
下面的方法用于替换DOM
节点。
方法 |
描述 |
replaceWith(newContent) |
将当前jQuery 对象包含的所有DOM 对象替换成newContent 。其中newContent 既可以是HTML 字符串,也可以是DOM 对象,还可以是jQuery 对象。 |
replaceWith(function(index)) |
使用function(index) 函数迭代处理jQuery 所包含的每个节点,依次使用function(index) 函数的返回值来替换jQuery 对象包含的每个节点。function(index) 函数中的index 参数表示当前正在被迭代处理的DOM 节点的索引。 |
replaceAll(selector) |
将当前jQuery 对象包含的所有DOM 对象替换成与selector 匹配的元素。 |
5.删除
下面的方法用于删除指定的DOM
节点。
方法 |
描述 |
empty() |
删除当前jQuery 对象包含的所有DOM 节点里的内容(仅保留每个DOM 节点的开始标签和结束标签)。 |
remove([selector]) |
删除当前jQuery 对象包含的所有DOM 节点。如果指定了selector 选择器,则只删除与selector 选择器匹配的DOM 节点。 |
detach([selector]) |
该方法的功能与remove([selector]) 方法相似,区别只在于detach() 方法会保留被删除元素上关联的jQuery 数据,当需要在后面某个时刻重新插入该被删除元素时,则该方法会比较有用。 |
6.复制
下面的方法用于复制DOM
节点。
方法 |
描述 |
clone([withDataAndEvents]) |
复制当前jQuery 对象里包含的所有DOM 元素并且选中这些复制出来的副本。当需要把DOM 文档中元素的副本添加到其他位置时,这个函数非常有用。其中withDataAndEvents 参数是可选的,如果该参数为true ,则会复制DOM 元素上的事件处理函数。 |
删除和复制 程序示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| <!DOCTYPE html> <html>
<head> <meta name="author" content="Yeeku.H.Lee(CrazyIt.org)" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title> 删除和复制HTML节点 </title> </head>
<body> <div> <span id="test1">id为test1的元素</span> Java </div> <span id="test2">id为test2的元素</span>
<script type="text/javascript" src="../jquery-3.1.1.js"> </script> <script type="text/javascript"> $("div").empty() .append("重新添加"); $("span").remove("#test2"); $("div").clone() .css("background-color", "#cdcdcd") .appendTo("body"); </script> </body>
</html>
|