当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


JQuery .replaceWith()用法及代码示例


用法
.replaceWith( newContent ) => jQuery

说明:用提供的新内容替换匹配元素集中的每个元素,并返回被移除的元素集。

  • 添加的版本:1.2.replaceWith( newContent )

    • newContent
      类型:htmlStringElementArrayjQuery
      要插入的内容。可以是 HTML 字符串、DOM 元素、DOM 元素数组或 jQuery 对象。
  • 添加的版本:1.4.replaceWith( function )

    • function
      类型:Function ()
      一个函数,它返回用于替换匹配元素集的内容。

.replaceWith() 方法通过一次调用从 DOM 中删除内容并在其位置插入新内容。考虑这个 DOM 结构:

<div class="container">
  <div class="inner first">Hello</div>
  <div class="inner second">And</div>
  <div class="inner third">Goodbye</div>
</div>

第二个内部 <div> 可以替换为指定的 HTML:

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

这导致结构:

<div class="container">
  <div class="inner first">Hello</div>
  <h2>New heading</h2>
  <div class="inner third">Goodbye</div>
</div>

All 内部 <div> 元素可以立即成为目标:

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

这会导致所有这些都被替换:

<div class="container">
  <h2>New heading</h2>
  <h2>New heading</h2>
  <h2>New heading</h2>
</div>

也可以选择一个元素作为替换:

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

这导致了 DOM 结构:

<div class="container">
  <div class="inner second">And</div>
  <div class="inner first">Hello</div>
</div>

此示例演示了选定元素通过从其旧位置移动而不是通过克隆来替换目标。

.replaceWith() 方法与大多数 jQuery 方法一样,返回 jQuery 对象,以便其他方法可以链接到它。但是,必须注意返回的是original jQuery 对象。此对象指的是已从 DOM 中删除的元素,而不是替换它的新元素。

其他注意事项:

  • .replaceWith() 方法删除与已删除节点关联的所有数据和事件处理程序。
  • 在 jQuery 1.9 之前,如果集合中的第一个节点未连接到文档,.replaceWith() 将尝试在当前 jQuery 集合中添加或更改节点,并且在这些情况下返回一个新的 jQuery 集合而不是原始集合。该方法可能会或可能不会返回新结果,具体取决于其参数的数量或连接性!从 jQuery 1.9 开始,.after().before().replaceWith() 总是返回原始的未修改集。尝试在没有父节点的节点上使用这些方法没有任何效果——也就是说,集合和它包含的节点都不会改变。

例子:

单击时,将按钮替换为包含相同单词的 div。

<!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-3.5.0.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>

演示:

用粗体字替换所有段落。

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>replaceWith demo</title>
  <script src="https://code.jquery.com/jquery-3.5.0.js"></script>
</head>
<body>
 
<p>Hello</p>
<p>cruel</p>
<p>World</p>
 
<script>
$( "p" ).replaceWith( "<b>Paragraph. </b>" );
</script>
 
</body>
</html>

演示:

单击时,将每个段落替换为已在 DOM 中并使用 $() 函数选择的 div。请注意,它不会克隆对象,而是将其移动以替换段落。

<!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-3.5.0.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,并将所选元素的类名附加到段落中。

<!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-3.5.0.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>

演示:

相关用法


注:本文由纯净天空筛选整理自jquery.com大神的英文原创作品 .replaceWith()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。