Подсчет перед указанным классом - PullRequest
0 голосов
/ 27 июня 2011

Я пытаюсь найти способ подсчитать элементы, которые являются заголовками определенного имени класса.У меня есть следующее:

$('.active').each(function(index,item){
  var nextDiv = $(item).next();
  var followingDiv = $(nextDiv).next('a');
  $(item).wrap("<div id='window" + index + "'></div>");
  $("#window"+index).append(nextDiv).append(followingDiv);
});

Это работает хорошо, он только захватывает два элемента, которые 'a' теги перед активным элементом, который в этом случае является '.active', и оборачивает их в div называется 'window'.

То, что я хочу выяснить, как это сделать, это добавить более двух элементов в заголовок активного класса и сохранить их в переменной вместо того, чтобы делать 10 переменных, которые говорят: .next('a').next('a') etc... Затем нужно добавить всеэти недавно созданные переменные, такие как:

$("#window"+index).append(nextDiv).append(followingDiv).append(another-a).append(another-a-again) ...

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

Ответы [ 2 ]

1 голос
/ 27 июня 2011

Я думаю, что вы хотите .nextAll() [документы] :

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

var as = $(this).nextAll('a');

Обновление: Забыли максимальный предел.Для этого вы можете использовать .slice() [документы] :

var as = $(this).nextAll('a').slice(0,10);

Весь ваш код будет:

$('.active').each(function(index,item){
  $(this).nextAll('a').slice(0,10)
      .add(this)
      .wrap("<div id='window" + index + "'></div>");
});

Возможно nextUntil [docs] также интересно для вас, если вы хотите сгруппировать все элементы .active по следующим ссылкам.

0 голосов
/ 27 июня 2011

Посмотрите на prevAll (или nextAll , в зависимости от того, какое направление вы подразумеваете под «впереди»).

Возможно, вы могли бы сделать что-то вроде:

$('.active').each(function(index, item) {
  $(this).prevAll().each(function(prevIndex, prevItem) {
    if (prevIndex < 10) {
      // ... do something with prevItem
    }
  });
});

Возможно, вам придется (например) изменить порядок, чтобы получить элементы непосредственно перед .active

...