2010-02-13 4 views
1

HTML:addClass если содержит матч

<li class="widgetcontainer widget_text" id="text-3"> 
    <h3 class="widgettitle">Static Ad</h3> 
    <div class="textwidget"><img alt="" src="static/announcement.png"></div> 
</li> 

JQuery:

if($('.widget_text')[0]) { 
    $('.widgettitle').each(function() { 
     if ($(this).containts('Static Ad')) { 
     $(this).parent().addClass('myclass'); 
     } 
    }); 
} 

... не работает. Ни:

if($('.widget_text')[0]) { 
    $('.widget_text').each(function() { 
     if ($(this).children('h3:contains:("Static Ad")')) { 
     $(this).parent().addClass('static-ad'); 
     } 
    }); 
} 

Как исправить?

Спасибо!

ответ

4

У вас есть опечатка: if ($(this).contains('Static Ad')) {

Try:

$('.widgettitle:contains("Static Ad")').parent().addClass('myclass'); 

или

$('.widget_text').each(function() { 
    if ($(this).children('h3:contains("Static Ad")').length > 0) { 
    $(this).addClass('static-ad'); 
    } 
}) 

У вас есть дополнительное двоеточие : в коде (удалить его), и я думаю, что вы необходимо удалить parent().

Кроме того, нет необходимости тестировать $('.widget_text')[0]. Если нет элемента с классом widget_text, $('.widget_text').each() ничего не будет делать в любом случае;)

+0

Спасибо, исправлено, но класс по-прежнему не добавлен. – 3zzy

+0

'.contains()' не используется таким образом. Он проверяет, находится ли узел DOM внутри другого узла DOM. – David

+0

@ Давид: Да, заметил это;) –

1

jQuery.contains должен проверить, находится ли один узел DOM внутри другого узла DOM.

Попробуйте вместо этого:

$('.widget_text').filter(function() { 
    return $(this).find('.widgettitle').text().indexOf('Static Ad') > -1; 
}).addClass('myclass'); 

Это позволит выбрать все элементы с widget_text класса, отфильтровывать те, которые не имеют потомка с widgettitle класса с «Static Ad» в тексте, и добавьте myclass.

Смежные вопросы