Метод обхода jQuery find (..) не включает текущий узел - он начинается с дочерних элементов текущего узла. Как лучше всего вызвать операцию поиска, которая включает текущий узел в свой алгоритм сопоставления? Просматривая документы, у меня сразу ничего не выскакивает.
134
'selector'
дважды делает инкапсуляцию более желательной. YMMV'selector'
дважды (как упоминалось @ronen), не могли бы вы просто использоватьobject.parent().find('selector')
??? - при этом мне нравится идея библиотеки, которая сделает это за вас.object.parent().find('selector')
включает братьевobject
и сестер и их потомков.Вы не можете сделать это напрямую, самое близкое, что я могу придумать, - это использовать
.andSelf()
и вызывать.filter()
, например:К сожалению
.andSelf()
, селектор не нужен, что было бы удобно.источник
closest(..)
включает текущий элемент DOM и вверх по дереву, тогда как все методы обхода вниз по дереву, такие как иfind(..)
т.д., не соответствуют текущему элементу. Это как если бы команда jQuery целенаправленно реализовала их для исключения дублирования, когда обе операции используются вместе для полного вертикального поиска.определять
затем используйте
вместо того
К сожалению, в jQuery этого нет. Действительно странно для стольких лет разработки. Мои обработчики AJAX не применялись к некоторым верхним элементам из-за того, как работает .find ().
источник
filter()
там, что имеет больше смысла.Вы можете сохранить
$('selector')
в переменной для ускорения. Вы даже можете написать для этого собственную функцию, если она вам очень нужна:источник
$('selector').find('otherSelector').add($('otherSelector'))
, что у вас сейчас эквивалентно.andSelf()
. Наконец,.andFind()
не фильтрует по выражению, вам нужно.add($(this).filter(expr))
:)$('selector')
заменен ли он каким-либо другим методом получения объекта jQuery (если это то, что вы имели в виду, не начиная с селектора),add()
может обрабатывать все, что и$()
может.$('selector')
может быть$('selector').children('filter').closest('.class').last()
... он может быть в цепочке, и вы не знаете, что это за объект, который вы добавляете, поэтому универсальное решение должно принимать предыдущий объект, как и фильтр :)this
это какой-либо объект jQuery, к которому был вызван плагин. С таким же успехом это могло быть результатом цепочки вызовов.Принятый ответ очень неэффективен и фильтрует набор уже сопоставленных элементов.
источник
Если вы хотите, чтобы цепочка работала правильно, используйте приведенный ниже фрагмент.
После вызова функции end возвращает элемент #foo.
Без определения дополнительных плагинов вы застряли на этом.
источник
this
больше, чем один элементthis.is()
, уже удовлетворен, если только один из них соответствует.Если вы ищете ровно один элемент , текущий или находящийся внутри него, вы можете использовать:
Если вам нужно несколько элементов, вы можете использовать:
Использование
andSelf
/andBack
довольно редко, не знаю почему. Возможно, из-за проблем с производительностью, о которых до меня говорили некоторые ребята.(Теперь я заметил, что Tgr уже дал это второе решение)
источник
Я знаю, что это старый вопрос, но есть более правильный способ. Если порядок важен, например, когда вы сопоставляете такой селектор
:first
, я написал небольшую функцию, которая будет возвращать точно такой же результат, как если быfind()
фактически включал текущий набор элементов:Это ни в коем случае не будет эффективным, но это лучшее, что я придумал для поддержания надлежащего порядка.
источник
Я думаю
andSelf
, что вы хотите:Обратите внимание, что при этом всегда будет добавляться текущий узел, независимо от того, соответствует он селектору или нет.
источник
Если вы строго смотрите в текущем узле (ах), вы просто делаете
источник
Я пытался найти решение, которое не повторяется (т.е. не вводит один и тот же селектор дважды).
И это крошечное расширение jQuery делает это:
Он объединяет
find()
(только потомков) сfilter()
(только текущий набор) и поддерживает любые аргументы, которые оба едят. ЭтоpushStack()
позволяет.end()
работать должным образом.Используйте как это:
источник
Вот правильная (но печальная) правда:
http://jsfiddle.net/SergeJcqmn/MeQb8/2/
источник
$(selector)
само из набора во всех случаях.