Я был удивлен, обнаружив, что поиск JQuery (...) не соответствует объектам в соответствии с их совпадением с CSS документа, а скорее соответствует их «поддереву», Соответствие CSS. Другими словами, если какая-либо часть селектора связана с узлом контекста или его предками при выполнении поиска (...), совпадение не выполняется.Как предотвратить JQuery find() от игнорирования соответствия css контейнера
Кто-нибудь знает эффективное обходное решение, которое позволяет мне использовать те же CSS-идентификаторы на уровне документа (включая совпадения контекста и его предков), что означает, что один и тот же селектор может найти элементы-потомки независимо от того, откуда начинается поиск?
Например, если у вас есть следующее содержание ...
<div class="slide special">
<ul>
<li>Parent of this text should be selected</li>
</ul>
</div>
... и попытаться найти LI следующим образом ...
var selector = ".special li";
var message = "";
message += "Global search finds" + $(selector).size() + "\n";
$(".slide").each(function(){
message += "Local search finds" + $(this).find(selector).size() + "\n";
});
alert(message);
... локальный поиск имеет нулевые совпадения, поскольку привязка для CSS .special - это сам контекстный элемент.
Для библиотеки презентаций слайдов, над которыми я работаю, жизнь для пользователей ниже по течению может быть проще, если они могут использовать одни и те же глобальные идентификаторы для стилей CSS и для связывания поведения JavaScript. Наиболее естественная стратегия CSS заключается в том, что для слайд-контейнеров данного типа есть селектор css, который влияет на стиль и поведение патронов и изображений внутри, но, похоже, я не могу использовать JQuery find (...) для этой работы.
Я думаю, что было бы расточительно и интенсивно находить все совпадающие элементы по всему миру, а затем искать всех своих предков для предполагаемого контекстного элемента, и я предполагаю, что есть какой-то способ JQuery.
Есть ли способ, которым можно использовать селектор уровня документа даже в пределах find(), или обходной путь, который имеет такой же эффект без действительно неприятной и неэффективной итерации?
Проблема в том, что вы находите элементы с классом 'slide', а затем просматриваете * внутри * их для элементов с классом' special'. Я не уверен, чего вы пытаетесь достичь здесь. – Archer
В «локальных поисках поиска» не будет $ (this) .children ('li') для этого? – danielcorreia
CSS будет делать то же самое, что и ваш код. То, что вы ищете в своем коде, это '.slide .special li', но то, что находится в разметке, на самом деле является' .slide.special li' (обратите внимание на нехватку пространства между двумя классами, что очень важно в этот случай.) – Archer