JQuery insertAt

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

А как насчет insertAfter () и insertBefore (): api.jquery.com/insertAfter & api.jquery.com/insertbefore

Tommz 24.03.2015 17:56
Как конвертировать HTML в PDF с помощью jsPDF
Как конвертировать HTML в PDF с помощью jsPDF
В этой статье мы рассмотрим, как конвертировать HTML в PDF с помощью jsPDF. Здесь мы узнаем, как конвертировать HTML в PDF с помощью javascript.
32
1
30 936
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Попробуйте что-то вроде этого:

$("#thelist li").eq(3).after("<li>A new item</li>");

С помощью функции eq вы можете получить определенный индекс извлеченных элементов ... затем вставить новый элемент списка после него.

В приведенной выше функции я вставляю новый элемент в позицию 4 (индекс 3).

Больше информации о функции на Документы jQuery

Привет, ты сменил имя! (извините, я только что заметил ^^)

Pim Jager 24.12.2008 15:05

хе-хе ага, к имени добавил свою фамилию =)

Andreas Grech 24.12.2008 15:42

К сожалению, этот подход не позволяет добавить элемент с индексом 0.

Andrew 15.06.2012 02:02

@Andrew: Добавить элемент в индекс 0 можно легко с помощью метода .prepend ().

Tamer Shlash 12.01.2013 05:54

Попробуйте использовать этот метод .. это самый простой способ вставить текст внутри элемента ..

<div id = "test"></div>

$('#test').append();

Подобно ответу Дреаса, но немного отличается и, возможно, более эффективно:

$("#thelist li:eq(2)").after("<li>new item</li>");

Или по-другому:

$("<li>new item</li>").insertAfter("#thelist li:eq(2)");

Мне также нравится использовать eq в качестве селектора. И это хорошо объясняет разницу между after и insertAfter.

random_user_name 08.08.2016 17:32

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

$.fn.insertAt = function(index, $parent) {
    return this.each(function() {
        if (index === 0) {
            $parent.prepend(this);
        } else {
            $parent.children().eq(index - 1).after(this);
        }
    });
}

Предположим, у нас есть следующий HTML:

<ul id = "items">
    <li>A</li>
</ul>

Тогда вставка элемента с индексом 0 $('<li>C</li>').insertAt(0, $('#items')) приведет к

<ul id = "items">
    <li>C</li>
    <li>A</li>
</ul>

При вставке другого элемента, на этот раз с индексом 1 $('<li>B</li>').insertAt(1, $('#items')) дает

<ul id = "items">
    <li>C</li>
    <li>B</li>
    <li>A</li>
</ul>

Заявление об ограничении ответственности: нет обработки ошибок входных параметров. Если index отрицательный или больше длины дочерних элементов, или если index не является числом, поведение более или менее неопределенно. Если $parent не является объектом jQuery, insertAt завершится ошибкой.

Это должен быть ответ, потому что он также охватывает индекс 0, что было бы невозможно с after или insertAfter.

AJ_83 28.12.2016 11:06

Другие вопросы по теме