【问题标题】:Get elements containing text from array从数组中获取包含文本的元素
【发布时间】:2015-09-07 11:32:56
【问题描述】:

我想搜索数组中包含任何字符串的所有元素。 例如 我有以下项目列表

<ul>
    <li>cricket bat</li>
    <li>tennis ball</li>
    <li>golf ball</li>
    <li>hockey stick</li>
</ul>

还有这个数组

var arr = ['bat', 'ball'];

它应该选择所有具有文本 bat 和 ball 的元素。如何使用 jquery 或 javascript 实现这一点。

这就是我正在尝试的

filter = 'bat ball';
var lis = row('UL li');
var flag = 0;
for (var i = 0; i < lis.length; i++) {
    var name = lis[i].getElementsByTagName('a')[0].innerHTML;
    if (name.toUpperCase().indexOf(filter) > -1) {
        flag = 1;
    } else {
        lis[i].style.display = 'none';
    }
}

【问题讨论】:

    标签: javascript jquery html arrays contains


    【解决方案1】:

    你可以使用:contains伪选择器:

    选择所有包含指定文本的元素。

    $('li:contains("bat"), li:contains("ball")')
    

    DEMO

    【讨论】:

    • 数组的值可以改变,可以是 100 字到 1 字。我该如何使用它?
    • @Twix 将数组中的每个元素添加为,,如上所示分隔
    【解决方案2】:

    您可以使用:contains selector

    在这种情况下,我认为您的意思是这些值中的任何一个

    var arr = ['bat', 'ball'];
    
    var selectors = arr.map(function(val) {
      return ':contains(' + val + ')'
    });
    var $lis = $('ul li').filter(selectors.join());
    
    $lis.css('color', 'red')
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <ul>
      <li>cricket bat</li>
      <li>tennis ball</li>
      <li>golf ball</li>
      <li>hockey stick</li>
    </ul>

    【讨论】:

    • 我可以只获取那些以任意顺序包含所有数组字符串的列表项吗?例如“球棒”或“球棒”或“曲棍球棒和板球”
    • @Twix var $lis = $('ul li').filter(selectors.join(''));
    【解决方案3】:

    尝试使用.filter().match()

    var arr = ["bat", "ball"];
    
    var res = Array.prototype.filter.call(document.querySelectorAll("li")
              , function(el, index) {
                  return el.textContent.match(new RegExp(arr.join("|"))) !== null
              });
      
    console.log(res);
    <ul>
        <li>cricket bat</li>
        <li>tennis ball</li>
        <li>golf ball</li>
        <li>hockey stick</li>
    </ul>

    【讨论】:

    【解决方案4】:

    试试这个:

    $.each(["bat", "ball"], function (i,val) {
        if ($("ul li:contains(" + val + ")").length) {
            $("ul li:contains(" + val + ")").css('color', 'red')
        }
    })
    

    DEMO

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-14
      • 1970-01-01
      • 2021-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多