jQuery: Добавьте класс ко всем элементам blockquote, которые не имеют элемента «cite» и не имеют этого класса

#jquery

#jquery

Вопрос:

Используя jQuery, как я могу выбрать все blockquote элементы, у которых нет cite элемента внутри и у которых нет класса testClass , и добавить этот класс к этим элементам blockquote. Например, он выберет этот blockquote (и добавит класс testClass ):

 <blockquote>
    <p>
        Lorem ipsum...
    </p>
</blockquote>
  

но не это (потому что у него уже есть этот класс):

 <blockquote class="testClass">
    <p>
        Lorem ipsum...
    </p>
</blockquote>
  

и не это (потому что у него есть cite элемент):

 <blockquote>
    <cite>Originally posted by John Doe:</cite>
    <p>
        Lorem ipsum...
    </p>
</blockquote>
  

Ответ №1:

Вы можете использовать .filter , ! (не) , hasClass , find().length

 $('blockquote').filter(function(){
  return !$(this).hasClass('testClass') amp;amp; !$(this).find('cite').length
}).addClass('testClass');  
 .testClass{
  background : red;
}  
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<blockquote>
    <p>
        Lorem ipsum...
    </p>
</blockquote>

<blockquote class="testClass">
    <p>
        Lorem ipsum...
    </p>
</blockquote>

<blockquote>
    <cite>Originally posted by John Doe:</cite>
    <p>
        Lorem ipsum...
    </p>
</blockquote>  

Ответ №2:

 $('blockquote').each(function(i, item) {

    var $item = $(item);

    if( !$item.hasClass('testClass') amp;amp; !$item.find('cite').length )
    {
        $item.addClass('testClass');
    }

});