【发布时间】:2015-02-28 00:18:51
【问题描述】:
给定以下结构
<p>
<p>
<span>
<span class="a">
<p>
我想把它变成
<p>
<span>
<span class="a">
是的,第一个块无效,我们将忽略它。这只是一个例子。
基本上,我想做的是检查是否需要任何孩子,如果没有,则删除它,保留其所有孩子。所以,所有<p> 都是相同的、直接的元素,因此只有最上面的元素真正在做任何事情(在我的代码中,我意识到情况并非总是如此)。然而,跨度虽然名称相同,但并不相同,因为一个有class="a",另一个没有类,因此它们都保留了。
如果类名不同,我正在寻找的扩展不仅会起作用,而且任何可能使它实际上不同的属性。
我在想我可以使用node1.attributes === node2.attributes,但这不起作用,即使node1 和node2 属性的长度为零。此外,node1 === node2、node1.isEqualNode(node2) 和 node1.isSameNode(node2) 也都失败了。没错,因为它们不是同一个节点。
那么我怎样才能正确地检查节点是否符合移除条件?
另一个例子,什么时候这实际上是有用的
<p>
<b>
Some text
<u>that is
<b>bolded</b> <!-- << That <b> is totally useless, and should be removed. -->
</u>
</b>
</p>
请不要使用 Jquery。
【问题讨论】:
-
您首先需要明确定义“必要”子节点是什么。
-
这就是示例的用途。与父元素相同的元素,并且似乎没有向标记添加任何内容。如原帖所述,外部 CSS 在技术上可能能够改变这一点,但我们忽略了这一点,因为该例外与我的情况无关。从技术上讲,它应该适用于
<ul>内的<ul>,尽管我会为这样的事情设置一个例外。但是,如果一个 ul 具有class、id、onclick、width或任何其他可用属性,则不应匹配。
标签: javascript dom comparison nodes