0

假设您想要获取节点 A 的 innerHTML,但您想要排除节点 B,它是节点 A 的后代的文本节点。您对节点 B 的引用存储在变量中,并且您不想删除来自页面的节点 B。您事先也不知道节点 A 中的其他内容,因此使用正则表达式从文本节点中删除文本可能会导致意想不到的后果(如果相同的文本存在于其他地方)。有没有办法在不修改页面的情况下做到这一点,如果有,怎么做?

4

3 回答 3

1

您可以克隆A节点,从中删除B节点,从而获得其 innerHTML

var A_clone = A.cloneNode();
A_clone.removeChild(B);  
/* B has to be evaluated from the cloned node or - if previously
 * evaluated - it will be a reference of the original A node 
 */

console.log(A_clone.innerHTML);
于 2012-08-31T08:31:57.670 回答
0

它不会很快,但您可以:

  • 克隆外部节点
  • 下降到克隆的内部节点(使用某种查找功能)并将其删除
  • 存储克隆节点的innerHTML
  • 丢弃克隆的节点
  • 返回存储的innerHTML
于 2012-08-31T08:31:37.183 回答
0

你也可以使用XMLSerializer对象,序列化 a 和 b,最后将 a 中 b 的匹配替换为 ""

于 2012-08-31T09:23:31.387 回答