【问题标题】:Problems with $.remove() in jQueryjQuery 中 $.remove() 的问题
【发布时间】:2011-11-03 09:58:23
【问题描述】:

简单来说...

我有元素clone。它的div 中保存了一些其他标签。它也有.x

我需要删除它,然后将修改后的元素应用到另一个元素。

不幸的是,它不起作用。删除失败什么的,但是.x还在里面。

clone = subtitle.clone(); // Works!
no_label = clone.remove('.x'); // This fails.
more_subtitles.append(no_label); // Its appends no_label, but it still contains .x element.

【问题讨论】:

  • 你的可变字幕里有什么?
  • subtitle 是另一个元素。

标签: javascript jquery append clone


【解决方案1】:

这是因为remove() 会从 DOM 中移除匹配的元素。即使您传递了一个选择器,它也仅用于过滤这些元素。在您的代码中,clone 匹配不公开 x 类的单个元素(克隆的字幕)。

您可以使用find() 来匹配.x 元素:

more_subtitles.append(subtitle.clone().find(".x").remove().end());

【讨论】:

    【解决方案2】:

    remove() 用于删除元素。为了删除一个类,你需要使用 removeClass(className)。

    【讨论】:

    • 不,不,不。我想用元素clone中的选择器.x删除元素
    【解决方案3】:

    您要从克隆内部删除 .x 元素吗?

     clone.find('.x').remove()
    

    【讨论】:

    • +1。 api.jquery.com/remove 选择器参数用于过滤clone 变量,而不是选择clone 的子元素。但是这次clone 可能是一个单一的元素集,并且该元素没有类x 所以它失败了。
    【解决方案4】:

    你可以这样做:

    clone = subtitle.clone();
    no_label = clone.find('.x').detach();
    more_subtitles.append(clone);
    

    请注意,您可以使用.detach() 代替.remove()。这将保留附加到元素的任何元数据。

    【讨论】:

    • 我不知道为什么会这样,但它会删除 all.x 匹配的其他元素。好笑!
    • 那是因为.detach返回分离的元素,结果赋值给no_label。第三个语句附加了no_label 而不是clone。将其更改为 more_subtitles.append(clone); 将修复它。
    【解决方案5】:

    您是否要从克隆中删除一个类?如果是,则使用 removeClass 如下:

    clone.removeClass('x');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-25
      • 2012-01-16
      • 2017-01-14
      • 1970-01-01
      • 2011-01-15
      相关资源
      最近更新 更多