Как я могу выбрать разные значения в переменной массива и добавить к другой переменной в jquery? - PullRequest
1 голос
/ 13 марта 2012

Предположим, я выбрал что-то:

var $nodeAll = $('.sortable');

Затем я хочу выбрать некоторые из них и добавить их в другую переменную с именем $ node. Я хочу выбрать, чтобы у родительского элемента не было класса с именем 'node':

$nodeAll.each(function () {
        if ($(this).parents('.node').length == 0) {
            //var $node=? what should I do?
        }
});

спасибо

Ответы [ 2 ]

3 голосов
/ 13 марта 2012

Во-первых, вы не можете иметь более одного элемента с id="sortable", поэтому я предполагаю, что вы собираетесь изменить это значение на class="sortable".

Вы используете либо jQuery .filter() с пользовательской функцией фильтра, либо вы можете использовать .not().

Использование .not():

var $nodeAll = $('.sortable');
var $nodeLess = $('.node .sortable');
var $nodeFree = $nodeAll.not($nodeLess);

Использование .filter() с пользовательской функцией:

var $nodeAll = $('.sortable');
var $nodeFilter = $nodeAll.filter(function() {
    return($(this).parents('.node').length == 0);
});

Если вы знаете, что у элемента .sortable никогда не будет самого .node, то это немного более эффективно, чем в предыдущей версии, поскольку .closest() может быть более эффективным, чем .parents(), но .closest() будет выглядеть сначала на начальном узле, тогда как .parents() начинается с первого родителя и не смотрит на текущий узел первым:

var $nodeAll = $('.sortable');
var $nodeFilter = $nodeAll.filter(function() {
    return($(this).closest('.node').length == 0);
});
2 голосов
/ 13 марта 2012

id s должно быть уникальным, поэтому нет смысла повторять var $nodeAll = $('#sortable') с each().Используйте класс .sortable и вместо each() вы можете использовать filter(), чтобы уменьшить набор объектов до объектов, которые удовлетворяют определенному условию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...