【问题标题】:Easiest way to remove nested tags [closed]删除嵌套标签的最简单方法[关闭]
【发布时间】:2015-10-01 13:25:34
【问题描述】:

我正在寻找使用 javascript 从 DOM 元素中删除嵌套标签的最简单方法(编码和执行时间)。

示例案例

<i><b>This <b><i>is <u>a</u> new</i></b> test</b></i>

想要的解决方案

<i><b>This is <u>a</u> new test</b></i>

解决方案需要与所有可能的 html 标记一起工作,而不仅仅是上面的示例。 需要消除所有嵌套标签,同时将内部 HTML 保留在 DOM 中。

解决方案可以但不需要使用 jQuery。

有什么建议吗?

【问题讨论】:

  • 到目前为止我没有尝试过任何事情,但对解决这个问题的简单方法很感兴趣
  • 我不明白反对意见。我要求解决一个明确定义的问题。
  • All nested tags div 的呢?
  • 假设我的 dom 元素是一个 div,然后我想从这个 div 的 innerHTML 中删除嵌套标签(但保留所有嵌套元素的 innerHTML)

标签: javascript jquery html tags nested


【解决方案1】:

为简单起见,您可以尝试一下:

$("body *").each(function () {
    if ($(this).parents(this.nodeName.toLowerCase()).length) $(this).contents().unwrap();
});

-DEMO-

【讨论】:

  • 这令人印象深刻,但我相信@Chris 的回答更简单易懂。
  • @eugensunic 但 OP 说:The solution needs to work generally with all possible html tags and not just for the above example
  • 我发表评论的第二次我想到了这一点。明天就你的问题投票,因为我的票用完了。
  • 有效。这进入了我想的方向。一个演示也很好(加一个)
  • 老实说,我认为这不会比这更容易 - 如果我错了在这里发布解决方案,我将切换接受的答案
【解决方案2】:

使用find 方法,您可以在&lt;i&gt; 标签内搜索&lt;b&gt; 标签的所有子标签:

JS:

$('i b').find('b', 'i').contents().unwrap();

【讨论】:

  • 这不是 OP 想要的,这些词正在被删除......
  • 抱歉没有看到那部分...抱歉,我更新了我的答案
  • 这不适用于嵌套在所选 html 元素中的标签。反例:text
  • @Thariama 你是对的......哇,这个很激烈。考虑到您可能拥有数百万种不同的配置,是否有可能?
  • 我想是的,A. Wolffs 解决方案有效,我不确定它是否比这更容易(但到目前为止,我给你加一个)
【解决方案3】:

这是对 A.Woffs 解决方案在代码执行方面的一个小改进。 这样,每个 dom 节点就少了一个 jQuery 元素。 但我不会为了这么小的改进而改变这个答案的公认答案。

$("body *").each(function () {
    var $this = $(this);
    if ($this.parents(this.nodeName.toLowerCase()).length) $this.contents().unwrap();
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-28
    • 2014-01-04
    • 2021-08-13
    相关资源
    最近更新 更多