
10.08.2017, 02:03
|
 |
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,146
|
|
Белый шум,
твой вариант короче 
|
|

10.08.2017, 09:34
|
Новичок на форуме
|
|
Регистрация: 09.08.2017
Сообщений: 7
|
|
Вы просто добавляете в результаты поиска исходный контекст, а это неверно. Повторюсь, нужно искать по произвольному селектору, от context включительно и глубже
|
|

10.08.2017, 10:12
|
 |
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,146
|
|
Сообщение от kazanova84
|
а это неверно
|
вы проверяли результат? это единственное решение для вашего случая, у Белый шум, короче код, у меня длиннее но алгоритм, один и тотже, найти все элементы по селелектору и отфильтровать(оставить) только те у кого предок context, затем к оставшимся элементам добавлется сам контекст.
|
|

10.08.2017, 10:29
|
Новичок на форуме
|
|
Регистрация: 09.08.2017
Сообщений: 7
|
|
Сообщение от рони
|
вы проверяли результат?
|
Да, в примере выше результат содержит элемент <table> и два элемента <a>, а по селектору должен содержать только <a>.
Сообщение от рони
|
затем к оставшимся элементам добавлется сам контекст
|
Контекст может удовлетворять селектору (попадает в результат), а может и не удовлетворять - соответственно не попадает в результат. В данном коде он попадает в результат всегда принудительно
|
|

10.08.2017, 10:50
|
 |
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,146
|
|
kazanova84,
более пас, вашу логику не осилил, всё что мог выше.
|
|

10.08.2017, 10:55
|
 |
Профессор
|
|
Регистрация: 19.01.2012
Сообщений: 505
|
|
kazanova84,
ну так уберите .addBack() в конце... Не?
|
|

10.08.2017, 12:40
|
Новичок на форуме
|
|
Регистрация: 09.08.2017
Сообщений: 7
|
|
Сообщение от Белый шум
|
ну так уберите .addBack() в конце... Не?
|
Не...
Немного переформулировал задачу и решил сам  Другими словами, постановка звучит так: найти по селектору элементы документа, которые являются самим контекстом или его дочерними элементами. Решил так
var $context = $('#context');
var selector = 'table a';
var res = $(selector).filter(function() {
return $context.is(this) || ($context.has(this).length > 0);
});
Единственный минус - то, что поиск идет вначале по всему документу, а потом применяется фильтр по контексту. Хорошо бы начинать поиск с контекста. Но тут нюанс: селектор описывает элемент в иерархии документа, а не контекста.
Всем спасибо за участие! 
|
|

10.08.2017, 14:34
|
 |
Профессор
|
|
Регистрация: 19.01.2012
Сообщений: 505
|
|
Сообщение от kazanova84
|
в примере выше результат содержит элемент <table> и два элемента <a>, а по селектору должен содержать только <a>.
|
Сообщение от kazanova84
|
Другими словами, постановка звучит так: найти по селектору элементы документа, которые являются самим контекстом или его дочерними элементами.
|
Из кода, конечно, понятно чего вы хотели, но сформулировать это на словах вы так и не смогли.
ADD: чтобы не искать по всему документу, можно так:
$context.parent().find(selector).filter(function() {
return $context.is(this) || ($context.has(this).length > 0);
});
ADD2: а, у вас же и документ может быть контекстом. Забыл.
Последний раз редактировалось Белый шум, 10.08.2017 в 15:03.
|
|

10.08.2017, 15:08
|
Профессор
|
|
Регистрация: 04.12.2012
Сообщений: 3,815
|
|
А не скажите, в какой ситуации это может понадобиться?
|
|

10.08.2017, 18:02
|
Новичок на форуме
|
|
Регистрация: 09.08.2017
Сообщений: 7
|
|
Nexus,
Селекторы ссылаются на элементы, которые нужно неким образом обработать. Когда на страницу вставляется новый контент (ajax) надо этот контент обработать селекторами. Можно, конечно, и классы к обработанным цеплять, но это не очень удобно в контексте кода
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
jquery. Метод find |
Анатолий Саратовцев |
Events/DOM/Window |
4 |
29.06.2012 09:23 |
|
|
|