所以我有这样的事情:
<div class="main">
<div class="useless">
text I don't want.
</div>
<div class="useless">
text I don't want.
</div>
<div class="narrow">
text I'm searching for
</div>
<div class="useless">
text I don't want.
</div>
<div class="useless">
text I don't want.
</div>
</div>
使用jQuery的可爱:contains
selector,我可以搜索关键字,但它会返回父级和子级。
我希望它只返回直接包含我正在搜索的单词的元素。
Stackoverflow有用地建议this link作为先前的尝试,但它似乎非常笨重,因为它爬行所有dom节点并且需要很多不清楚的代码。
答案 0 :(得分:8)
此脚本将查找包含特定文本的所有节点。它还允许您对文本(正则表达式等)进行任何字符串测试。
function getNodesThatContain(text) {
var textNodes = $(document).find(":not(iframe, script, style)")
.contents().filter(
function() {
return this.nodeType == 3
&& this.textContent.indexOf(text) > -1;
});
return textNodes.parent();
};
console.log(getNodesThatContain("test"));
以下是测试的小提琴:http://jsfiddle.net/85qEh/4/
PS - 为了提高速度,请使用不同的顶级选择器。例如,如果您只需要#container内部,那么您将var textNodes = $('#container')...
答案 1 :(得分:2)
解决方案,在上面提到的另一个问题中提供,但显然是一个不被高度重视的解决方案,是这样做的:
$("div:contains('searching')").filter(function() {
return (
$(this).clone() //clone the element
.children() //select all the children
.remove() //remove all the children
.end() //again go back to selected element
.filter(":contains('searching')").length > 0)
}).css('border', 'solid 1px black');
我添加它比写一个巨大的东西来抓取所有DOM节点更少笨重,并且在狭窄范围内真的应该影响更少的地方。
如果其他人有更好的想法,我肯定会感兴趣。
答案 2 :(得分:-2)
在JS中试试这个
$('div >:contains("text Im searching for")')