.replaceWith()

.replaceWith( newContent )返回类型:jQuery

描述:把匹配的元素集合中每个元素替换成提供的新内容,并返回被删除的元素集合。

.replaceWith()方法删除了来自DOM的内容,用一次调用插入它的位置的新内容考虑此DOM结构:

1
2
3
4
5
<div class="container">
<div class="inner first">Hello</div>
<div class="inner second">And</div>
<div class="inner third">Goodbye</div>
</div>

第二个内部<div>可能被替换成指定的HTML:

1
$( "div.second" ).replaceWith( "<h2>New heading</h2>" );

这产生了下面的结构:

1
2
3
4
5
<div class="container">
<div class="inner first">Hello</div>
<h2>New heading</h2>
<div class="inner third">Goodbye</div>
</div>

可以一次性把所有的class="inner"的<div>元素作为为目标:

1
$( "div.inner" ).replaceWith( "<h2>New heading</h2>" );

这导致所有的它们都被替换掉了:

1
2
3
4
5
<div class="container">
<h2>New heading</h2>
<h2>New heading</h2>
<h2>New heading</h2>
</div>

可以选中一个元素作为替换内容:

1
$( "div.third" ).replaceWith( $( ".first" ) );

这产生了以下DOM结构:

1
2
3
4
<div class="container">
<div class="inner second">And</div>
<div class="inner first">Hello</div>
</div>

此示例演示了通过把选中的元素从它的旧位置移到新位置,而不是通过克隆到新位置,使选中的元素替换掉目标元素。

.replaceWith()方法,就像大多数jQuery方法,返回jQuery对象,从而可以连缀其它方法。然而,需要注意的是,它返回了原来的jQuery对象。此对象指的是从DOM中删除的元素,不是替换上去的新元素。

补充说明:

  • .replaceWith()方法删除了所有的与被删除的节点相关联的数据以及事件处理函数。
  • 在jQuery 1.9以前,.replaceWith()方法将在当前jQuery集合中尝试添加或修改节点,如果集合中的第一个节点没有连系到文档的话,在那种情况下,将返回一个新的jQuery集合,而不是原来的集合。此方法可能返回也可能不返回一个新结果,取决于它的参数的数目或联系性。自从jQuery 1.9以来,.after()方法、.before()方法和.replaceWith()方法始终返回原来的未修改的集合。试图在没有父元素的节点上使用这些方法没有效果——也就是说,无论是集合还是它包含的节点都没有改变。

示例:

点击时,用包含了相同单词的<div>替换掉此按钮。

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
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>replaceWith demo</title>
<style>
button {
display: block;
margin: 3px;
color: red;
width: 200px;
}
div {
color: red;
border: 2px solid blue;
width: 200px;
margin: 3px;
text-align: center;
}
</style>
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
<button>First</button>
<button>Second</button>
<button>Third</button>
<script>
$( "button" ).click(function() {
$( this ).replaceWith( "<div>" + $( this ).text() + "</div>" );
});
</script>
</body>
</html>

演示:

用粗体单词替换掉所有段落。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>replaceWith demo</title>
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
<p>Hello</p>
<p>cruel</p>
<p>World</p>
<script>
$( "p" ).replaceWith( "<b>Paragraph. </b>" );
</script>
</body>
</html>

演示:

点击时,用$()函数选中已经存在于DOM中的<div>,用它替换掉所有段落。请注意,它并不克隆对象,仅仅是移动它以替换段落。

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 lang="en">
<head>
<meta charset="utf-8">
<title>replaceWith demo</title>
<style>
div {
border: 2px solid blue;
color: red;
margin: 3px;
}
p {
border: 2px solid red;
color: blue;
margin: 3px;
cursor: pointer;
}
</style>
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
<p>Hello</p>
<p>cruel</p>
<p>World</p>
<div>Replaced!</div>
<script>
$( "p" ).click(function() {
$( this ).replaceWith( $( "div" ) );
});
</script>
</body>
</html>

演示:

点击按钮时,用它的子<div>替换掉包含的<div>并把选中的元素的类名追加到段落类名后面。

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
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>replaceWith demo</title>
<style>
.container {
background-color: #991;
}
.inner {
color: #911;
}
</style>
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
<p>
<button>Replace!</button>
</p>
<div class="container">
<div class="inner">Scooby</div>
<div class="inner">Dooby</div>
<div class="inner">Doo</div>
</div>
<script>
$( "button" ).on( "click", function() {
var $container = $( "div.container" ).replaceWith(function() {
return $( this ).contents();
});
$( "p" ).append( $container.attr( "class" ) );
});
</script>
</body>
</html>

演示: