Javascript 扫描DOM以查找Angularjs中的字符串
我正在寻找一种在Angularjs中遍历给定字符串的DOM(或元素)的简单方法。如果找到给定的字符串,我想将其文本加粗。我觉得我已经想得太多了,因为我还没有想出一个解决办法 比如说 搜索狗应返回4个结果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</
<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类,您可以在其他地方找到相关文档和答案。