Я ищу такую функциональность: $(restrictTo).findAlsoSelf('.box').doSomethingWithTheMatches()
где restrictTo
- объект jquery (объект jQuery представляет собой набор элементов DOM). Поэтому я хочу, чтобы мои селекторы применялись к набору элементов, определяемых аргументом restrictTo
.
.find()
работает только для детей каждого элемента. Мне также нужен элемент, чтобы попытаться получить соответствие.
Демо использует метод .on()
который вы могли бы сказать, что я могу просто написать
$(document).on('click', '.box', function() {...
чтобы получить функциональность, которую я ищу. НО я не хочу удваивать связывание или испортить контент, который уже может быть загружен.
Хорошим примером этого является .color-box
. Мне нужен только тот, который я только что добавил, чтобы пожелтеть. Тот, который уже находится в нижней части страницы и наверху .content
должен оставаться зеленым.
Самое близкое, что я могу придумать, это:
$(restrictTo).find('.color-box').add($(restrictTo).siblings('.color-box')).doSomethingWithTheMatches()
Но это также соответствует любым братьям и сестрам уже на этом уровне dom (см. .color-box
в области .content
демонстрации.
Может быть, я слишком много думал об этом. Я думал, что я действительно знаком с jQuery, но я просто не могу придумать чистое решение.
Фактический проект использует requireJS с плагинами requireJS для шаблонов ручек и css. Весь код становится модульным. Поэтому, как только шаблон получает визуализацию, мне нужно связать и добавить javascript, чтобы идти вместе с этим фрагментом. У меня есть метод attach, в котором я вызвал require(['modules/tiny-module/tiny.bits']);
но проблема в том, что если мне нужно загружать в tiny-module
более одного раза, скрипт tiny.bits.js
выполняется один раз, когда он загружается на страницу, когда tiny-module
загружается в первый раз и никогда не присоединяется к вновь загруженный дом.
Как только я выясню это restrictTo
, я в основном вызову метод bind()
методе attach каждого модуля, который будет выполняться при каждой последовательной загрузке модуля.
Изменение: Мой ответ не разрешил, но я просто хочу документировать его. Он не работает с этим корпусом.
jQuery.fn.findAlsoSelf = function(selector) {
return this.find(selector).add(this.filter(selector));
};
@phenomnomnominal ответ велик и работает с обоими демонстрациями.
Я думаю, что вы хотите:
jQuery.fn.filterFind = function(selector) {
return this.find('*') // Take the current selection and find all descendants,
.addBack() // add the original selection back to the set
.filter(selector); // and filter by the selector.
};