2015-06-22 88 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