2013-08-19 2 views
2

Я пытаюсь использовать contains с ключевым словом 'this', но он дает ошибку.Элементы фильтра из объекта jquery на основе текстового содержимого

JS

$(function(){ 
    var check=$('ul').find('li').filter(function(){ 
     return $(this:contains('two')).css('color','red') 
    }) 
}) 

HTML

<ul> 
    <li id="one">one</li> 
    <li id="two">two</li> 
    <li id="one">one</li> 
    <li id="two">two</li> 
    <li id="one">one</li> 
    <li id="two">two</li> 
    <li id="one">one</li> 
    <li id="two">two</li> 
    <li id="one">one</li> 
    <li id="two">two</li> 
</ul> 
+0

Вы хотите убедиться, что в нем существует «два»? или что «два» - это единственное в нем? – smerny

+1

Похоже, вам не хватает закрывающей круглой скобки: '$ (this) .contains (...' –

+0

'var check = $ (" ul li: contains ('two') "). Css ('color', ' red '); ' – j08691

ответ

5

Это то, что вы ищете?

Fiddle

$(function() { 
    $('ul').find('li').filter(function() { 
     return this.innerHTML == 'two'; 
    }).css('color','red') 
}) 

Или, чтобы соответствовать его где-нибудь в элементе (а не только "два" быть в нем):

Fiddle

$(function() { 
    $('ul').find('li').filter(function() { 
     return /two/.test(this.innerHTML); 
    }).css('color','red') 
}) 

Кроме того, если это имеет значение ... методы (цепные .find().filter()), кажется, быстрее, чем при использовании contains:

Performance test created for this specifically
Another related test

И ваши идентификаторы должны быть уникальными - но я предполагаю, что это просто копировать/вставлять пример кода и что на самом деле у вас нет дубликата идентификатора в вашем фактическом коде.

+0

Я удалил .contains .. спасибо за конструктивную помощь. – Krishna

3

Без filter так просто, как

$("ul li:contains('two')").css('color', 'red'); 

WORKING DEMO

0
$(this).text() == 'two'; 

Получить текущий Ли текст & чек, если он имеет значение "два".

+0

Я вижу, что вы говорите – Krishna