【问题标题】:Remove children of div dynamically [closed]动态删除 div 的子级 [关闭]
【发布时间】:2015-02-08 12:38:19
【问题描述】:

我有一个div,它创建了动态子div

<div id="abcd">
<div class="myclass">Hello</div>
<div class="myclass">World</div>
</div>

有很多动态生成的div,我需要删除所有子div而不删除第一个div,即显示“Hello”的div。

【问题讨论】:

标签: javascript jquery


【解决方案1】:

试试.filter(fn):

$('#abcd div').filter(function(){
    return this.textContent !== "Hello"
}).remove();

Fiddle


根据 skobaljic 的评论更新:

$('#abcd div').filter(function () {
    return $(this).index() !== 0
}).remove();

上面的代码在问题中删除了除第一个之外的所有 div,因为 required

Updated Fiddle.


.filter() 允许您根据不同的属性返回选择器,因此在本例中我们使用.text().index()。因此它将返回所有不包含文本 Hello 的 div,并使用 .remove() 方法将其链接以删除。

【讨论】:

  • 这是完全错误的。问题与 div 中的内容无关,他只想删除 #abcd 中除第一个孩子之外的所有内容。
  • @skobaljic 你是对的,看到使用.index() 的更新,我想这是有道理的。
  • 猜猜这与使用#abcd div:gt(0) 相同,但比这更好的是jQuery documentation also says 使用slice(1) 方法并提高执行,仍然最好的解决方案是使用纯css 选择器作为@ 987654324@ 上面建议。我想你也应该同意。 This 性能测试您可能会感兴趣。
【解决方案2】:

适用于 OP 问题的另一种不同答案

$("#abcd .myclass").not(":eq(0)").remove();

$("#abcd .myclass").not(":lt(1)").remove();

$("#abcd .myclass").not(":first").remove();

$("#abcd").find(".myclass:not(:contains('Hello'))").remove();

$("#abcd .myclass").not(":nth-child(1)").remove();

$("#abcd .myclass").not(":nth-of-type(1)").remove();

$("#abcd .myclass").nextAll().remove();

$("#abcd .myclass").nextUntil().remove();

Fiddle

【讨论】:

  • 超级吉吉..你做得很好..我会给你5000增量
  • 谢谢巴拉吉。简直超级
【解决方案3】:

如果你想要一些有趣的东西,还有一个选择:)

$('#abcd > * + *').remove();

它使用 CSS 选择器来选择直接子元素 &gt;(所有 .myclass div),并且在它们中只匹配任何 (*) 前一个元素的下一个直接兄弟元素 (+)。实际上,这意味着除了第一个之外,所有的孩子都将被匹配,因为它之前没有任何元素。

当然general sibling selector~也可以用

$('#abcd > * ~ *').remove();

查看下面的演示:

$('#abcd &gt; * + *').remove();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="abcd">
    <div class="myclass">Hello</div>
    <div class="myclass">World</div>
    <div class="myclass">Test</div>
</div>

【讨论】:

  • 嗬嗬,这是什么,请稍加解释。看起来很有趣。
  • 它是:选择#abcd的所有直系子级之前有兄弟姐妹。
  • 你可以在这里阅读owl-selector
  • 嗯...!有趣但如果顺序不同怎么办。我的意思是,如果我们更改包含文本 Hello 的 div 文本的顺序,如问题中所述。
  • @DerVampyr 这就是为什么我说如果有人想要一些有趣的解决方案:)。它只是纯 CSS,所以我认为熟悉 CSS 选择器也很有意义。顺便说一句,使用此表单$abcs &gt; .myclass + .myclass 可能更容易理解。我使用 * 是因为它更通用、更简短。
【解决方案4】:

你可以这样做:

$('#abcd .myclass').not(':first').remove();

DEMO

参考

.not()

:first

【讨论】:

  • 如果hello 是第二个。
  • 他要求删除除第一个 div 之外的所有内容。第一个 div 包含 hello 是一个示例 [...]i.e div which says "Hello"。 ...如果我做对了
【解决方案5】:

像这样:

$("#abcd > div:not(:first)").remove();

http://jsfiddle.net/dqazuyx3/1/

【讨论】:

    【解决方案6】:

    试试

    $( "div div:first-child" ).nextAll().remove();
    

    【讨论】:

      【解决方案7】:

      试试这个:JSFIDDLE

      $('#abcd').find('.myclass:not(:first)').remove()
      

      【讨论】:

      • 如果可行,请告诉我。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-30
      • 2021-12-02
      • 1970-01-01
      相关资源
      最近更新 更多