让你一眼看破包裹节点的方法!

No description provided.

直接看效果

包裹节点

说明

  • wrap()将所有匹配的元素进行单独的包裹,在原来的元素的外部实施包裹
  • wrapAll()将匹配的元素集合当做一个整体来包裹,在元素的外部实施包裹
  • wrapInner()经所有匹配的元素进行单独的包裹,在原来的元素额内部实施包裹

代码

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>让你一眼看破包裹节点的方法</title>
<style>
*{
margin:0;
padding:0;
}
body{
padding:10px;
}
div{
margin:8px;
padding:2px;
border:1px solid red;
}
ul{
width:100px;
list-style:none;
text-align:center;
}
ul li{
padding:2px;
margin:4px;
background:#e8e8e8;
border:1px solid black;
}
</style>
</head>
<body>
你喜欢的编程语言
<ul id="ul1">
<li>C</li>
<li>Java</li>
<li>Python</li>
<li>C++</li>
</ul>
<select>
<option> </option>
<option>wrap</option>
<option>wrapAll</option>
<option>wrapInner</option>
</select>
<!--
//用于验证在jquery3.0之前,wrapAll()通过回调函数可以实现和wrap()相同的功能
<script src="https://code.jquery.com/jquery-2.2.4.js" integrity="sha256-iT6Q9iMJYuQiMWNd9lDyBUStIq/8PuOW33aOqmvFpqI=" crossorigin="anonymous"></script>-->
<script src="https://code.jquery.com/jquery-3.1.0.js" integrity="sha256-slogkvB1K3VOkzAI8QITxV3VzpOnkeNVsKvtkYLMjfk=" crossorigin="anonymous"></script>
<script>
$(function(){
$("select").change(function(){
$("#ul1").html("<ul id='ul1'><li>C</li><li>Java</li><li>Python</li><li>C++</li></ul>");//还原为初始状态
if($("option:selected").val().indexOf("wrap")!==-1){//如果选中项的值含有“wrap”字符(即选中的不是第一项)
$("ul").find("li")[$(this).val()]("<div></div>");
}
});
//用于验证在jquery3.0之前,wrapAll()通过回调函数可以实现和wrap()相同的功能
//$("li").wrapAll(function(){return "<div></div>"});
});
</script>
</body>
</html>

attentions

在jquery3.0之前,wrapAll()通过回调函数可以实现和wrap()相同的功能,上面的代码已经给出了验证的方法。我一直觉得那应该是个bug。wrapAll的原意就是“包裹所有”,用它实现每个匹配元素的单独的包裹显得有点古怪了。最近翻阅了jQuery官方文档后,发现jQuery3.0以上的版本已经修正了这个bug.