Jquery - скрыть определенный div

У меня есть несколько div, которые имеют общий класс. Если у одного из этих div нет дочернего div, я хочу скрыть div. Я могу найти нужный div, но не могу его скрыть.

Это мой код,

$(function() {

        if ($(".adRight.childen('div')").length == 0) {
            $(this).hide();

        }

    });

Что я должен использовать вместо (этого)? это относится к документу, а не к div, найденному оператором if.


person Johan Alkstål    schedule 09.03.2010    source источник


Ответы (2)


Ты ищешь:

$("div.adRight:not(:has(div))").hide();

Как читается.

Ваш исходный код перепутал селекторы с функциями (например, .childen рассматривается как селектор класса) и показывает, что вам нужно немного больше прочитать, прежде чем писать код jQuery. Извините.
Ваш оператор if, например, ищет то, что jQuery не может найти (неправильный синтаксис). jQuery возвращает пустую коллекцию — у него есть политика не генерировать ненужные исключения, поэтому его длина равна 0. Он не ищет 0 дочерних элементов.
Также обратите внимание, что для простого действия, такого как hide, вам не нужно выполнять итерацию. коллекция - hide будет работать с элементами, которые вы уже нашли, используя ваш селектор.

person Kobi    schedule 09.03.2010
comment
Спасибо Коби! Очень красивый и эффективный код. :) Правильно ли я понял, что div.adRight относится ко всем div с классом adRight? - :not и :has проверяет, нет ли у него div? - person Johan Alkstål; 09.03.2010
comment
Йова - правильно. Селекторы jQuery очень мощные, но с ними легко работать и они легко читаются. Вы просто должны найти правильный! - person Kobi; 09.03.2010

Может быть:

if ($(".adRight div")== undefined) { $(".adRight").hide(); }

(~~ не уверен)

person Sam Zhou    schedule 09.03.2010