gpt4 book ai didi

javascript - 使用 Javascript TreeWalker 按类名过滤以更改文本

转载 作者:行者123 更新时间:2023-11-29 21:08:02 25 4
gpt4 key购买 nike

正在关注 that讨论,我想了解如何使用 TreeWalker 更改按类名过滤的文本节点上的文本。

我想用“x”替换 <p class="french"> 上的所有数字仅。

有一个解决方案here ,但最终的 jQuery 对我来说并不实用。我想了解为什么我的以下解决方案不起作用。

myfilter = function(node){
if (node.className=="french")
return NodeFilter.FILTER_ACCEPT
else
return NodeFilter.FILTER_SKIP;
}

var walker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT, myfilter, false);

while (walker.nextNode()) {
walker.currentNode.nodeValue.replace(/(\d)/gu, 'x');
}
<body>
<p>890008900089000</p>
<p class="french">890008900089000</p>
</body>

最佳答案

你的代码

  • 遍历所有文本节点 (NodeFilter.SHOW_TEXT)
  • 其中 className=="french"
  • 将其值中的每个数字替换为“x”

有几个问题。

  1. 文本节点没有类。你必须测试他们的父节点类。
  2. 字符串是不可变的,您不会使用替换的结果。
  3. 您实际上想用“x”替换所有数字,而不是所有数字。 (?)

所以把node.className改成node.parentNode.className,把\d改成\d+,将 String#replace 的结果分配回 walker.currentNode.nodeValue:

myfilter = function(node){
if (node.parentNode.className=="french")
return NodeFilter.FILTER_ACCEPT
else
return NodeFilter.FILTER_SKIP;
}

var walker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT, myfilter, false);

while (walker.nextNode()) {
walker.currentNode.nodeValue = walker.currentNode.nodeValue.replace(/\d+/g, 'x');
}

关于javascript - 使用 Javascript TreeWalker 按类名过滤以更改文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43023787/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com