2013-12-16 2 views
1

У меня есть динамически созданные статьи на моей странице в пределах div с идентификатором #content. Статьи имеют длинную последовательность классов, напримерjQuery, если элемент имеет класс в строке классов

<article id="post-126" class="post-126 post type-post status-publish format-standard hentry category-all-portfolio category-detached portfolio_post target"> 

и

<article id="post-125" class="post-125 post type-post status-publish format-standard hentry category-all-portfolio category-terraced portfolio_post"> 

Я хочу, чтобы добавить дополнительный класс к этим статьям, только если она содержит определенный класс. Например, если статья содержит класс «категория-отсоединенный» (который первый делает), я хочу добавить к нему класс «target».

Вот что я пытался, но он не будет работать

$(document).ready(function(){ 

if($('#content article').hasClass('category-detached')){ 
    $(this).addClass('target'); 
} 
}); 

ответ

3

this в вашем случае это окно, а не элемент.

Вобще:

var $elem = $('#content article'); 
if($elem.hasClass('category-detached')){ 
    $elem.addClass('target'); 
} 

или

$('#content article').addClass(function(){ 
     if($(this).hasClass('category-detached')) return "target"; 
    }); 
+0

+1, но технически он мог бы иметь всю эту функцию, завернутую в функцию, и вызывает ее как 'Method.call ($)', изменяя таким образом 'this'. –

+0

@BradM Правда, но, вероятно, перебор, но он также может использовать обратный вызов addClass. Мне тоже понравилось ваше решение, если OP не хочет ничего делать в том случае, если ваш первый будет самым простым способом. – PSL

2

Самое простое решение.

$('#content article.category-detached').addClass('target'); 

Причина это не работает, потому что это this не идет речь в контексте вашего элемента.

Если вы включили его, оно изменило бы значение this, чтобы обратиться к каждому элементу вашей коллекции.

$('#content article').each(function() { 
    if($(this).hasClass('category-detached')){ 
     $(this).addClass('target'); 
    } 
}); 
Смежные вопросы