考虑下面的html,
<div id="test">
{{ sometext }}
</div>
<span class="testing">
{{ asdknfsdf }}
</span>
我想在jquery中获取内部文本与{{ <sometext> }}
匹配的所有元素。我尝试了下面的代码,但我无法正确获取元素。我在这里缺少什么?
var elements = [];
$('*:contains("{{ .* }}")').each(function(){
elements.push(this);
});
答案 0 :(得分:4)
有几件事:
1)“无法正确获取元素”并不是非常具有描述性。你没有得到任何结果吗?出乎意料的结果?
2)通过使用*:contains
的选择器,您要求包含指定文本的每个元素。这意味着您将html
,body
和其他父元素以及最近的div
。将您的选择器范围扩展到div
个元素,甚至更好地扩展到您知道可能包含预期结果的类。
3)只需在选择器的结果上调用makeArray()
即可简化逻辑:
var elements = $.makeArray($('body *:contains("{{ sometext }}")'));
console.log('elements ::', elements);
答案 1 :(得分:1)
尝试:
var elements = [];
$('body *').each(function(){
if($(this).html()=="{{ <sometext> }}"){
elements.push($(this).html());
}
});
答案 2 :(得分:1)
我查看了JQuery中的:contains()选择器,我不认为它是正则表达式 - 你必须创建一个正则表达式,然后循环遍历你的元素以寻找匹配。这是理论上的,但应该让你开始:
var reg = new RegExp("\{\{(.*)\}\}","g");
$('body *').each(function(i) {
if(reg.test($(this)/text())) {
//do something
}
});
答案 3 :(得分:0)
您可以使用jQuery map函数根据正则表达式测试每个元素并返回一个元素数组:
var elements = $("*").map(function () {
if (/{{.*}}/g.test($(this).text())) {
return this;
}
}).get();