Предположим, у меня есть два контейнера с одним и тем же CSS, примененным к ним и их подэлементам.
<div class="wrapper">
<div class="item">item</div>
<div class="dummy">distrating item</div> <!-- dummy one -->
<div class="item">item</div>
<div class="item">item</div>
...
</div>
<div class="wrapper">
<div class="item">item</div>
<div class="dummy">distrating item</div> <!-- dummy one -->
<div class="item">item</div>
<div class="item">item</div>
...
</div>
Это конечно на пример. но суть вот в чем. Если я определяю селектор jQuery как:
$(".wrapper .item")
а затем напишите плагин jQuery, который должен что-то делать с этими элементами, но для каждого контейнера, как я могу получить подмножество элементов из всего набора, принадлежащего каждому контейнеру?
$.fn.extend({
randomize: function() {
if (this.length > 1)
{
var set = this;
var origSelect = set.selector;
var containers = this.parent();
$.each(containers, function() {
var container = $(this);
var items = set.filter(?????);
....
});
}
return this;
}
});
На основе данных, которые у меня есть во внутренней функции:
- полный набор
- селектор исходного элемента
- текущий контейнер
Есть ли какой-нибудь селектор jQuery, который может помочь мне получить подмножество элементов из всего набора, принадлежащего определенному элементу.
Первая возможность
Это, конечно, не работает:
$(origSelect, container);
что эквивалентно
$(".wrapper .item", ".wrapper");
потому что класс контейнера CSS является частью исходного селектора. Если бы это было не так, это сработало бы. но я не могу это контролировать.
Вторая возможность
Фильтрация по
container.children();
также завершится ошибкой, так как будут выбраны фиктивные элементы.
Но идея состоит в том, чтобы повторно использовать существующий набор jQuery, что, конечно, быстрее, чем повторный выбор узлов DOM, что делается в обоих случаях.
Итак, в основном я хочу что-то вроде:
set.filter(something);
Но я не знаю, есть ли фильтр для того, что я хочу.