Лучший способ узнать, является ли элемент потомком другого

Судя по количеству отзывов, которые я получил, мое самое противоречивое мнение, по-видимому, заключается в том, что программисты не всегда читают книги, которые, как они утверждают, прочитали . Это сопровождается моим мнением, что программист с формальным образованием лучше, чем тот же программист, который самоучка (но не обязательно лучше, чем другой программист, который самостоятельно учил).

64
задан Benjamin 28 July 2015 в 10:43
поделиться

7 ответов

Я думаю, вы могли бы воспользоваться преимуществами выбора стиля CSS здесь, с возвращенная длина ..

$('#australopithecus #homo-sapiens').length // Should be 1
$('#homo-sapiens #homo-herectus').length // Should be 0

Не совсем верно / неверно, но проверка 0/1 как логического должна работать. :)

В качестве альтернативы вы можете сделать что-нибудь вроде $ ('# parent').

31
ответ дан 24 November 2019 в 15:37
поделиться

Как насчет


$("#homo-herectus").parents().is("#australopithecus");
21
ответ дан 24 November 2019 в 15:37
поделиться

Вы можете использовать is () работают так:

alert($('#homo-sapiens').is('#australopithecus *'));
// -> true

alert($('#homo-herectus').is('#homo-sapiens *'));
// -> false
5
ответ дан 24 November 2019 в 15:37
поделиться
function descendantOf(parentId, childId) {
   return ( $('#'+parentId+' > #'+childId).length === 1 );
}

Это должно сработать.

Как было указано в комментарии ниже, если вы не хотите, чтобы это были просто прямые потомки:

function descendantOf(parentId, childId) {
   return ( $('#'+childId, $('#'+parentId)).length === 1 );
}
-1
ответ дан 24 November 2019 в 15:37
поделиться

Вы можете попытаться .find () его в Elements .children ()

$("#lucy").find("#homo-erectus").length;

Или в обратном направлении:

$("#homo-erectus").parents().find("#lucy").length;
3
ответ дан 24 November 2019 в 15:37
поделиться

Предположим, вы переписываете ваше первоначальное утверждение в:

$('#homo-sapiens').descendantOf('#australopithecus');

попробуйте подключаемый модуль:

(function($) {
    $.fn.descendantOf = function(parentId) {
        return this.closest(parentId).length != 0;
    }
})(jQuery)
-1
ответ дан 24 November 2019 в 15:37
поделиться
$.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
4
ответ дан 24 November 2019 в 15:37
поделиться
Другие вопросы по тегам:

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