Судя по количеству отзывов, которые я получил, мое самое противоречивое мнение, по-видимому, заключается в том, что программисты не всегда читают книги, которые, как они утверждают, прочитали . Это сопровождается моим мнением, что программист с формальным образованием лучше, чем тот же программист, который самоучка (но не обязательно лучше, чем другой программист, который самостоятельно учил).
Я думаю, вы могли бы воспользоваться преимуществами выбора стиля CSS здесь, с возвращенная длина ..
$('#australopithecus #homo-sapiens').length // Should be 1
$('#homo-sapiens #homo-herectus').length // Should be 0
Не совсем верно / неверно, но проверка 0/1 как логического должна работать. :)
В качестве альтернативы вы можете сделать что-нибудь вроде $ ('# parent').
Как насчет
$("#homo-herectus").parents().is("#australopithecus");
Вы можете использовать is ()
работают так:
alert($('#homo-sapiens').is('#australopithecus *'));
// -> true
alert($('#homo-herectus').is('#homo-sapiens *'));
// -> false
function descendantOf(parentId, childId) {
return ( $('#'+parentId+' > #'+childId).length === 1 );
}
Это должно сработать.
Как было указано в комментарии ниже, если вы не хотите, чтобы это были просто прямые потомки:
function descendantOf(parentId, childId) {
return ( $('#'+childId, $('#'+parentId)).length === 1 );
}
Вы можете попытаться .find ()
его в Elements .children ()
$("#lucy").find("#homo-erectus").length;
Или в обратном направлении:
$("#homo-erectus").parents().find("#lucy").length;
Предположим, вы переписываете ваше первоначальное утверждение в:
$('#homo-sapiens').descendantOf('#australopithecus');
попробуйте подключаемый модуль:
(function($) {
$.fn.descendantOf = function(parentId) {
return this.closest(parentId).length != 0;
}
})(jQuery)
$.fn.descendantOf = function(element) {
element = $(element)[0];
var current = this;
var body = document.body;
while (current && current != element && current != document.body) {
current = $(current).parent()[0];
}
if (typeof(current) == "undefined" || typeof(current) == "null") {
return false;
} else if (current == element) {
return true;
} else if (current == document.body) {
return false;
}
}
Example:
<div id="foo">
<div id="bar">
<div id="baz"></div>
</div>
</div>
And:
$('#foo').descendantOf('#bar'); // false
$('#foo').descendantOf('#foo'); // false
$('#foo').descendantOf(document.body); // true
$('#bar').descendantOf('#foo'); // true
$('#baz').descendantOf('#foo'); // true