【问题标题】:How get an element if its inner text matches a pattern in jquery?如果元素的内部文本与 jquery 中的模式匹配,如何获取元素?
【发布时间】:2014-01-16 20:27:50
【问题描述】:

考虑一个像下面这样的 html,

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

我想在 jquery 中获取内部文本与{{ &lt;sometext&gt; }} 匹配的所有元素。我尝试了以下代码,但无法正确获取元素。我在这里错过了什么?

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

【问题讨论】:

    标签: jquery regex parsing


    【解决方案1】:

    几件事:

    1) “无法正确获取元素”的描述性并不好。你没有结果吗?出乎意料的结果?

    2) 通过使用*:contains 的选择器,您可以查询包含指定文本的每个元素。这意味着您将htmlbody 和其他父元素以及最近的div。将您的选择器限定为 div 元素,或者更好的是,限定为您知道可能包含预期结果的类。

    3) 您可以通过在选择器的结果上简单地调用 makeArray() 来简化您的逻辑:

    var elements = $.makeArray($('body *:contains("{{ sometext }}")'));
    console.log('elements ::', elements);
    

    【讨论】:

    • +1 ,建议将 div 排除在 div:contains 之外,这样他就可以真正得到包含字符串的任何类型的元素。
    • +1 为 $.makeArray()。我正在尝试获取包含与正则表达式匹配的文本的直接父元素 \\{\\{.*\\}\\} (java regex 模式)
    • 参见上面关于父元素的评论。给定您的示例 HTML,*:contains:contains 的选择器返回太多。它需要更仔细地确定范围。见api.jquery.com/contains-selector。您需要其他东西才能获得资格;或者你需要做一些更像@tilda下面的建议的事情。
    • +1 for $.makeArray() 但不是div:contains,而是body *:contains,不是吗?因为您想影响所有元素,而不仅仅是 div。
    【解决方案2】:

    我查看了 JQuery 中的 :contains() 选择器,我认为它不会执行正则表达式 - 您必须创建一个正则表达式,然后循环遍历您的元素以查找匹配项。这是理论上的,但应该可以帮助您入门:

    var reg = new RegExp("\{\{(.*)\}\}","g");
    $('body *').each(function(i) {
       if(reg.test($(this)/text())) {
         //do something
       }
    });
    

    【讨论】:

      【解决方案3】:

      试试:

       var elements = [];
      $('body *').each(function(){
          if($(this).html()=="{{ <sometext> }}"){
          elements.push($(this).html());
          }
      });
      

      demo

      【讨论】:

        【解决方案4】:

        您可以使用 jQuery map 函数根据正则表达式测试每个元素并返回一个元素数组:

        var elements = $("*").map(function () {
            if (/{{.*}}/g.test($(this).text())) {
                return this;
            }
        }).get();
        

        【讨论】:

          猜你喜欢
          • 2010-11-08
          • 2011-04-26
          • 2020-07-03
          • 1970-01-01
          • 1970-01-01
          • 2017-10-11
          • 2015-12-31
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多