jQuery получает следующий набор классов?

#jquery #next #closest

#jquery #Далее #ближайший

Вопрос:

У меня есть следующий HTML, например

 <body>
   <div class="myCool">blah</div>
   <div class="cool">some text</div>
   <div class="cool">some text</div>
   <div class="cool">some text</div>
   <div class="cool">some text</div>
   <div class="myCool">blah</div>
   <div class="cool">some text</div>
   <div class="cool">some text</div>
   <div class="cool">some text</div>
   <div class="cool">some text</div>
</body>
  

Что я пытаюсь сделать, это начать с myCool и обернуть его и следующие 4 класса cool в a div ? Итак, это выглядит так

  <div id="1" class="myWrapped">
   <div class="myCool">blah</div>
   <div class="cool">some text</div>
   <div class="cool">some text</div>
   <div class="cool">some text</div>
   <div class="cool">some text</div>
 </div>
 <div id="2" class="myWrapped">
   <div class="myCool">blah</div>
   <div class="cool">some text</div>
   <div class="cool">some text</div>
   <div class="cool">some text</div>
   <div class="cool">some text</div>
 </div>
  

Есть идеи, как я могу это сделать?

Комментарии:

1. Атрибуты идентификатора всегда должны начинаться с буквы: w3.org/TR/html4/struct/global.html#adef-id

Ответ №1:

попробуйте

 $(".myCool").each(function(i){
  $(this).nextUntil(".myCool").andSelf().wrapAll("<div id='"   (i 1)   "' class='myWrapped'></div>");
});
  

Комментарии:

1. хорошее решение, хотя забыл идентификатор!

2. Вы, сэр, — легенда! Спасибо — это было .andSelf() то, чего мне не хватало 🙂 Добавление id также было бы предпочтительнее? Как насчет .each(function(i)} ..... <div id="' i '" ...

3. @KevinB — просто вопрос — если бы я хотел сделать это только для 1 «set»? Как бы я это сделал? т. е. от .mycool до .cool x4, но без 2-го и т. Д. Т. Е. Нужно использовать что-то вроде .next(‘cool’)` для 4x или что-то в этом роде или?

4. @Andy — Просто не используй .each . $(".myCool").nextUntil(".myCool").etc...

5. @KevinB — спасибо за ответ! нет, но я имею в виду — если у меня нет следующего .myCool , то есть у меня есть только .myCool, .cool x4

Ответ №2:

вы можете сделать так

 jQuery("<div class='myCool'>blah</div>").appendTo('body');
for(var i=0; i<4;i  )
{
    jQuery('<div class="cool">some text</div>').appendTo('.myCool');
}
  

Комментарии:

1. -1 вообще не отвечает на вопрос