jQuery: классы и .each () - PullRequest
       1

jQuery: классы и .each ()

0 голосов
/ 10 февраля 2012

Я пытаюсь добавить классы к элементам в div (.views-row). У меня проблема в том, что строка .views повторяется на странице, что неизбежно, и все элементы, которые я пытаюсь оформить, заканчиваются одним и тем же классом независимо от того, должны они или нет. Код, вероятно, объясняет это лучше:

$(".views-row").each(function(){
        if ($((this)" .field-name-field-warning:contains('High')").length) {
            $((this)" .field-name-field-warning").addClass("fault-high");
            $((this)" .field-name-field-warning .field-label").addClass("disappear");
            $((this)" .field-name-field-warning .field-items").addClass("disappear");
        }
        if ($((this) ".field-name-field-warning:contains('Moderate')").length) {
            $((this) ".field-name-field-warning").addClass("fault-moderate");
            $((this) ".field-name-field-warning .field-label").addClass("disappear");
            $((this) ".field-name-field-warning .field-items").addClass("disappear");
        }
});

Полагаю, у меня проблемы с (этой) частью. Есть мысли?

Спасибо вам.

Ответы [ 4 ]

1 голос
/ 10 февраля 2012

Если вы хотите выбрать какой-либо элемент из вашего текущего, есть два способа.

Использование $ (). Find () :

$(this).find(".field-name-field-warning")

Предоставляя контекст (который практически совпадает с поиском):

$(".field-name-field-warning", $(this))
0 голосов
/ 10 февраля 2012

Похоже, вы пытаетесь найти элемент внутри элемента, используя this.Вы должны find метод для этого и filter, чтобы отфильтровать элемент в соответствующем наборе элементов.

Вот полный упрощенный код.

$(".views-row").each(function(){
     var $fieldWarning = $(this).find(".field-name-field-warning");
     if($fieldWarning.length){
        if ($fieldWarning.filter(":contains('High')").length) {
            $fieldWarning.addClass("fault-high");
            $fieldWarning.find(".field-label").addClass("disappear");
            $fieldWarning.find(".field-items").addClass("disappear");
        }
        if ($fieldWarning.filter(":contains('Moderate')").length) {
            $fieldWarning.addClass("fault-moderate");
            $fieldWarning.find(".field-label").addClass("disappear");
            $fieldWarning.find(".field-items").addClass("disappear");
        }
     }
});

Ссылка: .find () , .filter ()

0 голосов
/ 10 февраля 2012

Нет необходимости использовать .each () здесь, когда .addClass () все равно будет перебирать все элементы для вас.

Вы можете начать с перехода на что-то вроде этого:

var containsHigh = $(".views-row .field-name-field-warning:contains('High')")
containsHigh.addClass('fault-high');
containsHigh.find('.field-label, .field-items').addClass('disappear');

var containsModerate = $(".views-row .field-name-field-warning:contains('Moderate')")
containsModerate.addClass('fault-moderate');
containsModerate.find('.field-label, .field-items').addClass('disappear');

Тогда станьте еще интереснее, используя такие методы:

var warnings = $(".views-row .field-name-field-warning");
warnings.filter(":contains('High')")
    .addClass('fault-high')
    .find('.field-label, .field-items').addClass('disappear');

warnings.filter(":contains('Moderate')")
    .addClass('fault-moderate')
    .find('.field-label, .field-items').addClass('disappear');
0 голосов
/ 10 февраля 2012

используйте .find () на этом:

$(this).find("selector");
...