jQuery addClass для каждого элемента, который имеет х детей? - PullRequest
2 голосов
/ 03 октября 2011

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

Вот мой код:

if ( jQuery('#container .document').children().size() > 2 ) {
     jQuery(this).addClass("anything"); 
}

Нерабочий пример:

http://jsfiddle.net/HHSuM/1/

Ответы [ 5 ]

7 голосов
/ 03 октября 2011

Вы можете использовать filter , чтобы ограничить список элементами с более чем двумя дочерними элементами.

jQuery('#container .document').filter(function() {
    return this.children.length > 2; //Use just the regular DOM children property in here
}).addClass("anything");

JSFiddle: http://jsfiddle.net/HHSuM/4/

4 голосов
/ 03 октября 2011

Зацикливание элементов с .each():

$('#container .document').each(function() {
  if (this.children.length > 2) {
    $(this).addClass('anything');
  }
});
2 голосов
/ 03 октября 2011

Я подумал, что это интересно, и попытался использовать :has() в сочетании с :nth-child(), но я получил синтаксическую ошибку.

// Does NOT work... why?
jQuery('#container .document:has(*:nth-child(3))').addClass('anything');

Но слегка изменив подход, работает:

// Nifty!
jQuery('#container .document *:nth-child(3)').parents('.document').addClass('anything');

По сути, мы ищем элементы с третьим элементом, а затем движемся вверх по DOM.

1 голос
/ 03 октября 2011

у вас есть много вариантов здесь

  1. вы можете использовать .each () для итерации по элементам, проверить в функции обратного вызова, есть ли у них 2 или более дочерних элемента, а затем добавить класс

  2. другой вариант, который мне нравится больше, использует .filter (), например:

    $('#container .document').filter(function(){  
        return $(this).children().length > 2;
    }).addClass('anything');
    

    или ваш пример: http://jsfiddle.net/saelfaer/HHSuM/6/

1 голос
/ 03 октября 2011

Используйте .each() для перебора элементов #container .document.

Обновил jsfiddle . Кажется, работает!

...