Какой селектор JQuery исключает объекты с родителем, который соответствует данному селектору?

Очень простой способ

Если ваш объект такой:

var obj = {
  x: true,
  y: {
    xy: 'some value'
  }
}

var result = obj ? obj.y ? obj.y.xy ? obj.y.xy : 'N/A' : 'N/A' : 'N/A'

console.log(result) // "some value"
71
задан chaos 8 June 2009 в 16:50
поделиться

5 ответов

Дело в том, что jQuery просто не имеет особенно элегантного способа делать то, что вы хотите. Хотя ответ хаоса действительно работает, вы должны задаться вопросом, стоит ли сложный селектор (который будет примерно таким же медленным, как селектор на сложной веб-странице) по сравнению с более подробной, но более быстрой функцией фильтрации, которая у вас есть. На самом деле это не такая уж большая проблема, просто мне лично надоели особенно длинные, запутанные селекторы, когда я могу этого избежать.

Другой вариант - создать свой собственный селектор, поскольку jQuery великолепен:

jQuery.expr[':'].parents = function(a,i,m){
    return jQuery(a).parents(m[3]).length < 1;
};

$('.foo,.bar').filter(':parents(.baz)');

карта expr является частью механизма выбора Sizzle, и документацию можно найти здесь: Пользовательские псевдоселекторы Sizzle

79
ответ дан 24 November 2019 в 13:02
поделиться
$('.foo:not(.baz .foo),.bar:not(.baz .bar)')
30
ответ дан 24 November 2019 в 13:02
поделиться

Селектор chaos дает должен работать:

$('.foo:not(.baz .foo),.bar:not(.baz .bar)')

Просто хотел дать вам совет о расширение для FireBug под названием FireFinder , которое можно использовать для тестирования селекторов css / jquery.

С веб-сайта: Firefinder - это расширение для Firebug (в Firefox) и предлагает функциональные возможности для быстрого поиска элементов HTML, соответствующих выбранному селектору (-ам) CSS или выражению XPath. Он позволяет мгновенно тестировать селекторы CSS на странице, одновременно просматривая содержимое, и соответствующие элементы будут выделены.

1
ответ дан 24 November 2019 в 13:02
поделиться

Добавьте: not ('. Baz') к селектору верхнего уровня.

0
ответ дан 24 November 2019 в 13:02
поделиться

Мне не удалось заставить это работать:

$(".children:not(#parent .children)");

Но я могу заставить это работать:

$(".children").not($("#parent .children"));

Примечание. Не уверен, связано ли это с версией jQuery. Я с использованием 1.2.6

18
ответ дан 24 November 2019 в 13:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: