выберите и покажите все элементы h2 внутри их собственных div

#javascript #jquery #html

#javascript #jquery #HTML

Вопрос:

Итак, у меня есть этот Jquery:

     var all = document.getElementsByTagName("h2");

    for (var i=0, max=all.length; i < max; i  ) {
        $("h1").after($(all).html());
    }
  

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

вот HTML:

         <h1>Oversigt</h1>
    <div class="slide">
        <h2>trin 1</h2>
        <p>Tekst til afsnit 1.</p>
    </div>
    <div class="slide">
        <h2>trin 2</h2>
        <p>Tekst til afsnit 2.</p>
    </div>
    <div class="slide">
        <h2>trin 3</h2>
        <p>Tekst til afsnit 3.</p>
    </div>
  

И вот ссылка на код в JSFiddle

Что я хочу сделать, так это опубликовать каждый заголовок каждого div после h1 элемента, чтобы на странице отображалось: Oversigt Trin 1 Trin 2 Trin 3

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

1. Возможно, я неправильно интерпретирую этот код, но вы забыли использовать i ? например $("h1").after($(all[i]).html());

2. Хорошо, спасибо! Это… Вид работ — это просто в обратном направлении (начиная с последнего элемента h2)

3. Это потому, что он продолжает вставляться после h1 . Таким образом, они продолжают вклиниваться друг в друга.

Ответ №1:

Вы забыли использовать i . Также из-за того, как вы пытаетесь это сделать, ваши элементы будут изменены на противоположные. Вот мое предложение

             for (var max = all.length, i = max; i > 0; i--) {
                $("h1").after($(all[i - 1]).html());
            }
  

Демонстрация: http://jsfiddle.net/3FLxu /

РЕДАКТИРОВАТЬ: это выглядит более чистым, но либо работает

             for (var max = all.length, i = max - 1; i >= 0; i--) {
                $("h1").after($(all[i]).html());
            }
  

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

1. Идеально! Спасибо! Я просто не мог обмозговать это!

Ответ №2:

Попробуйте следующее:

 var $all = $("h2");
$all.each(function() { $("h1").after($(this).html()) });
  

Я думаю, вы неправильно понимаете, как работают коллекции в jQuery. Причина, по которой первый отображается несколько раз, заключается в том, что цикл вызывает метод несколько раз, но .html() может одновременно извлекать HTML только из одного из элементов коллекции. Таким образом, вместо того, чтобы выдавать ошибку, он просто берет этот HTML-код из первого элемента в коллекции.

Вы также можете использовать следующее, как указано @Joseph Marikle в его комментарии:

 var all = document.getElementsByTagName("h2");

for (var i=0, max=all.length; i < max; i  ) {
    $("h1").after($(all[i]).html());
}
  

Это больше похоже на приведенный вами код, но оба делают одно и то же.

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

1. Спасибо! Это работает, но при этом сначала отображается последний из элементов h2 (Trin 3Trin 2Trin 1) Есть предложения по этому поводу? РЕДАКТИРОВАТЬ: Извините, я понял это сейчас .. У Джозефа Марикла был ответ

2. Вы можете использовать фрагмент документа и добавить его, а не добавлять каждый по отдельности.

3. Хороший звонок @JosephMarikle! 1