2015-06-22 91 views
-1

我想搜索包含数组中任何字符串的所有元素。 例如 我有一个项目获取包含数组中文本的元素

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

的下面的列表,这阵

var arr = ['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'; 
    } 
} 

回答

3

您可以使用: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>

+0

我可以只获取那些以任何顺序具有数组的所有字符串的列表项吗?例如'蝙蝠球'或'球棒'或'曲棍球蝙蝠和板球' – Twix

+1

@Twix'var $ lis = $('ul li')。filter(selectors.join(''));' –

+0

谢谢。 .that正常工作,我想 – Twix

4

可以使用:contains伪选择:

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

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

DEMO

+0

值可以被改变也可以是100个字,以1个字。我怎样才能使用它? – Twix

+0

@Twix将数组中的每个元素添加为',',如上所示分隔 – Tushar

0

尝试利用.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>

+0

“downvote”说明? – guest271314

+1

或许[它没有足够的jQuery](http://meta.stackexchange.com/a/19492)呢? – empiric

0

尝试这种情况:阵列的

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

DEMO