Очень простой способ
Если ваш объект такой:
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"
Дело в том, что 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
Селектор chaos дает должен работать:
$('.foo:not(.baz .foo),.bar:not(.baz .bar)')
Просто хотел дать вам совет о расширение для FireBug под названием FireFinder , которое можно использовать для тестирования селекторов css / jquery.
С веб-сайта: Firefinder - это расширение для Firebug (в Firefox) и предлагает функциональные возможности для быстрого поиска элементов HTML, соответствующих выбранному селектору (-ам) CSS или выражению XPath. Он позволяет мгновенно тестировать селекторы CSS на странице, одновременно просматривая содержимое, и соответствующие элементы будут выделены.
Добавьте: not ('. Baz') к селектору верхнего уровня.
Мне не удалось заставить это работать:
$(".children:not(#parent .children)");
Но я могу заставить это работать:
$(".children").not($("#parent .children"));
Примечание. Не уверен, связано ли это с версией jQuery. Я с использованием 1.2.6