Каков новый правильный способ использования дочернего селектора с контекстом node в jQuery?
В документация jQuery для селектора дочерних элементов Я увидел эту заметку:
Примечание. Селектор $("> elem", context)
будет устаревшим в будущей версии. Его использование, таким образом, обескураживается вместо использования альтернативных селекторов.
Я использую этот шаблон все время, обычно так:
$nodes.find('> children[something=morecomplicated] > somethingelse');
Однако я не понимаю, к чему могут относиться "альтернативные селекторы". Каков правильный способ записи селектора, который пересекает непосредственные дочерние объекты контекста node? Как бонус, может ли кто-нибудь объяснить, почему это обесценивается? Все альтернативы, которые все дают, кажутся удивительно уродливыми.
Вот некоторые вещи, которые не работают:
// does not guarantee that '.child' is an immediate child
$nodes.find('.child > .grandchild');
// this will return empty array in recent jQuery
// and will return full list of children in older jQuery
$nodes.children('.child > .grandchild');
// Anything like this which forces you to split up the selector.
// This is ugly and inconsistent with usual selector ease-of-use,
// and is a non-trivial conversion for long or complex selectors.
$nodes.children('.child').children('.grandchild');
// After all, no one would ever recommend
$nodes.find('.this').children('.that');
// instead of
$nodes.find('.this > .that');
Ответы
Ответ 1
Причина, по которой они говорят:
Примечание. Селектор $("> elem", context)
будет устаревшим в будущей версии. Его использование, таким образом, обескураживается вместо использования альтернативных селекторов.
Является результатом запятой, за которой следует контекст в селекторе. Например. $("> elem")
отлично, однако $("> elem", context)
будет устаревшим.
$("> elem", context)
совпадает с $(context + "> elem")
.
Правильный способ получения детей и внуков -
$("elem").children('.child').children('.grandchild');
или
context.children('.child').children('.grandchild');
или
context.find('> .child > .grandchild');