Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 10.08.2017, 02:03
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,069

Белый шум,
твой вариант короче
Ответить с цитированием
  #12 (permalink)  
Старый 10.08.2017, 09:34
Новичок на форуме
Отправить личное сообщение для kazanova84 Посмотреть профиль Найти все сообщения от kazanova84
 
Регистрация: 09.08.2017
Сообщений: 7

Сообщение от Белый шум Посмотреть сообщение
var s = $(selector);
var res = $(context).find(s).addBack();

https://jsfiddle.net/0jbq9pbe/
Вы просто добавляете в результаты поиска исходный контекст, а это неверно. Повторюсь, нужно искать по произвольному селектору, от context включительно и глубже
Ответить с цитированием
  #13 (permalink)  
Старый 10.08.2017, 10:12
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,069

Сообщение от kazanova84
а это неверно
вы проверяли результат? это единственное решение для вашего случая, у Белый шум, короче код, у меня длиннее но алгоритм, один и тотже, найти все элементы по селелектору и отфильтровать(оставить) только те у кого предок context, затем к оставшимся элементам добавлется сам контекст.
Ответить с цитированием
  #14 (permalink)  
Старый 10.08.2017, 10:29
Новичок на форуме
Отправить личное сообщение для kazanova84 Посмотреть профиль Найти все сообщения от kazanova84
 
Регистрация: 09.08.2017
Сообщений: 7

Сообщение от рони
вы проверяли результат?
Да, в примере выше результат содержит элемент <table> и два элемента <a>, а по селектору должен содержать только <a>.
Сообщение от рони
затем к оставшимся элементам добавлется сам контекст
Контекст может удовлетворять селектору (попадает в результат), а может и не удовлетворять - соответственно не попадает в результат. В данном коде он попадает в результат всегда принудительно
Ответить с цитированием
  #15 (permalink)  
Старый 10.08.2017, 10:50
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,069

kazanova84,
более пас, вашу логику не осилил, всё что мог выше.
Ответить с цитированием
  #16 (permalink)  
Старый 10.08.2017, 10:55
Аватар для Белый шум
Профессор
Отправить личное сообщение для Белый шум Посмотреть профиль Найти все сообщения от Белый шум
 
Регистрация: 19.01.2012
Сообщений: 498

kazanova84,
ну так уберите .addBack() в конце... Не?
Ответить с цитированием
  #17 (permalink)  
Старый 10.08.2017, 12:40
Новичок на форуме
Отправить личное сообщение для kazanova84 Посмотреть профиль Найти все сообщения от kazanova84
 
Регистрация: 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);
});


Единственный минус - то, что поиск идет вначале по всему документу, а потом применяется фильтр по контексту. Хорошо бы начинать поиск с контекста. Но тут нюанс: селектор описывает элемент в иерархии документа, а не контекста.

Всем спасибо за участие!
Ответить с цитированием
  #18 (permalink)  
Старый 10.08.2017, 14:34
Аватар для Белый шум
Профессор
Отправить личное сообщение для Белый шум Посмотреть профиль Найти все сообщения от Белый шум
 
Регистрация: 19.01.2012
Сообщений: 498

Сообщение от 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.
Ответить с цитированием
  #19 (permalink)  
Старый 10.08.2017, 15:08
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,726

А не скажите, в какой ситуации это может понадобиться?
Ответить с цитированием
  #20 (permalink)  
Старый 10.08.2017, 18:02
Новичок на форуме
Отправить личное сообщение для kazanova84 Посмотреть профиль Найти все сообщения от kazanova84
 
Регистрация: 09.08.2017
Сообщений: 7

Nexus,
Селекторы ссылаются на элементы, которые нужно неким образом обработать. Когда на страницу вставляется новый контент (ajax) надо этот контент обработать селекторами. Можно, конечно, и классы к обработанным цеплять, но это не очень удобно в контексте кода
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
jquery. Метод find Анатолий Саратовцев Events/DOM/Window 4 29.06.2012 09:23