如果元素的内部文本与jquery中的模式匹配,如何获取元素?

时间:2014-01-16 20:27:51

标签: jquery regex parsing

考虑下面的html,

<div id="test">
{{ sometext }}
</div>
<span class="testing">
{{ asdknfsdf }}
</span>

我想在jquery中获取内部文本与{{ <sometext> }}匹配的所有元素。我尝试了下面的代码,但我无法正确获取元素。我在这里缺少什么?

var elements = [];
$('*:contains("{{ .* }}")').each(function(){
   elements.push(this); 
});

4 个答案:

答案 0 :(得分:4)

有几件事:

1)“无法正确获取元素”并不是非常具有描述性。你没有得到任何结果吗?出乎意料的结果?

2)通过使用*:contains的选择器,您要求包含指定文本的每个元素。这意味着您将htmlbody和其他父元素以及最近的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());
    }
});

demo

答案 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();