jQuery: тонкая разница между .has () и: has ()

При использовании с дочерним селектором > два варианта jQuery "has" ведут себя по-разному.

Возьмите этот HTML:

Text

Теперь:

$("div:has(>span)");

вернет его, а:

$("div").has(">span");

- нет. Это ошибка или особенность? Сравните здесь: http://jsfiddle.net/aC9dP/


РЕДАКТИРОВАТЬ: Это может быть ошибка или, по крайней мере, недокументированное несогласованное поведение.

В любом случае, я думаю, было бы полезно, чтобы дочерний селектор постоянно работал как унарный оператор. Он позволяет вам делать то, что в противном случае потребовало бы настраиваемой функции фильтра - он позволяет вам напрямую выбирать элементы, у которых есть определенные дочерние элементы:

$("ul:has(>li.active)").show();     // works
$("ul").has(">li.active)").show();  // doesn't work, but IMHO it should

в отличие от:

$("ul").filter(function () {
  return $(this).children("li.active").length > 0;
}).show();

Я открыл билет jQuery (7205) для этого.

10
задан Incognito 19 October 2010 в 17:33
поделиться