Javascript 扫描DOM以查找Angularjs中的字符串

Javascript 扫描DOM以查找Angularjs中的字符串,javascript,angularjs,Javascript,Angularjs,我正在寻找一种在Angularjs中遍历给定字符串的DOM(或元素)的简单方法。如果找到给定的字符串,我想将其文本加粗。我觉得我已经想得太多了,因为我还没有想出一个解决办法 比如说 搜索狗应返回4个结果 <section id="container"> <div> <h2>Dogs are great</h2> <p>They are the best. Everyone should have a dog</

我正在寻找一种在Angularjs中遍历给定字符串的DOM(或元素)的简单方法。如果找到给定的字符串,我想将其文本加粗。我觉得我已经想得太多了,因为我还没有想出一个解决办法

比如说

搜索狗应返回4个结果

<section id="container">
  <div>
    <h2>Dogs are great</h2>
    <p>They are the best. Everyone should have a dog</p>
    <div>
      <p>Cat owners are just confused dog owners</p>
      <p>What's your doggos name?</p>
    </div>
  </div>
</section>

<script>
$scope.search = function(word){
    var entireDom = // Get the entire innerText of the <section>
    if(entireDom.match(word) {
      // Wrap the string in <strong> tags & update the DOM somehow?
      // This function should probably be case insensitive
    }
}
<script>

狗很好
他们是最好的。每个人都应该养一只狗

养猫的人就是养狗的人

你的狗狗叫什么名字

$scope.search=函数(word){ var entireDom=//获取 if(entireDom.match)(word){ //将字符串包装在标记中&以某种方式更新DOM? //此函数可能不区分大小写 } }

任何想法或提示都会非常有用。谢谢!

这将不加区别地将该逻辑应用于文档正文的整个innerHTML:

document.body.innerHTML = document.body.innerHTML.replace(/(dog)/gi, '<strong>$1</strong>');
document.body.innerHTML=document.body.innerHTML.replace(/(dog)/gi,$1);
不过,我不会在有子节点的节点上执行此操作。如果我搜索“div”,会发生什么情况。如果您想要对哪些节点进行更多控制,可以仅在innerHTML特定节点上替换regex,简单示例:

Array.prototype.slice.call(document.body.getElementsByTagName("*"))
  .forEach(f => {
    if(f.children.length === 0) f.innerHTML = f.innerHTML.replace(/(dog)/gi, '<strong>$1</strong>')
  });
Array.prototype.slice.call(document.body.getElementsByTagName(“*”)
.forEach(f=>{
如果(f.children.length==0)f.innerHTML=f.innerHTML.replace(/(dog)/gi,$1)
});
请看这里:


这确实会改变DOM。向这些节点添加一个带有类的span可能会更容易,这样您可以在搜索新词或其他内容时关闭高亮显示。

请参阅Thank Jorg。这是一个完美的解决方案。您能建议如何将变量作为
replace()中的第一个参数传递吗
function?斜杠很棘手&
gi
involved您需要使用Regexp类,您可以在其他地方找到相关文档和答案。