#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