JQuery Выбор элементов, которые имеют класс A или B или C - PullRequest
2 голосов
/ 31 августа 2011

Я работаю над чем-то, где мне нужны две функции.

1 - мне нужно посмотреть на группу детей с одним и тем же родителем и на основе имени класса «активный», добавить идентификатор этого элемента вмассив.

['foo-a','foo-b','foo-d']

2 - затем я перебираю все дочерние элементы в другом родительском элементе и для каждого элемента хочу выяснить, есть ли у него имя класса, соответствующее идентификаторам в массиве.

Имеет ли этот элемент класс foo-a, foo-b или foo-d?

Ответы [ 3 ]

3 голосов
/ 31 августа 2011

Для первой части я бы использовал map и get:

var activeGroups = $('#parent .active').map(function() {
    return this.id;
}).get();

Это дает вам массив значений идентификаторов (скажем, ['foo-a', 'foo-d']). Затем вы можете создать селектор, например .foo-a, .foo-b, .foo-c ( множественный селектор ), используя join:

var activeSelector = '.' + activeGroups.join(', .');

Это делает правильную строку селектора jQuery, например '.foo-a, .foo-d'. Затем вы можете использовать этот селектор, чтобы найти нужные элементы, используя find:

var activeEls = $('#secondParent').find(activeSelector);

Затем вы можете делать все, что вам нужно, с activeEls.

2 голосов
/ 31 августа 2011
var active = $("#foo").find(".active").map(function() {
    return this.id;
}).get();

$("#anotherParent *").each(function() {
   var that = this;
   var classes = $(this).attr("class");
   if(classes.indexOf(" ") !== -1) {
       classes = classes.split(" ");
   } else {
       classes = [ classes ];  
   }
   $.each(classes, function(i, val) {
       if($.inArray(val, active)) {

           // this element has one of 'em, do something with it
           $(that).hide();
       }
   });
});
1 голос
/ 31 августа 2011

Всегда есть .is('.foo-a, .foo-b, .foo-d'). Или, если вы на самом деле просто хотели выбрать их, вместо того, чтобы повторять и выбирать для каждого элемента, $('.foo-a, .foo-b, .foo-d', startingPoint).

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