Подтвердить что ты не робот

Как собрать <ul> с помощью jQuery append()?

Я пытаюсь использовать функцию append и столкнулся с этим:

$("#details").append('<ul>');
for (var i = 0; i < 10; i++) {
    $("#details").append('<li>something</li>');
}
$("#details").append('</ul>');

Похоже, что элементы <li> отображают OUTSIDE тегом <ul>.

Является ли это ошибкой jQuery?

4b9b3361

Ответ 1

Нет, это ошибка программиста. <li> прикрепляются к их <ul> или <ol>, а не к его контейнеру. И добавление тега close является бессмысленным.

В основном вы работаете так, как будто вы добавляете файлы с необработанным HTML, и это не так; вы на самом деле работаете с DOM.

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

var list = $("#details").append('<ul></ul>').find('ul');
for (var i = 0; i < 10; i++)
    list.append('<li>something</li>');

Примечание. см. (и выше) ответ Blixt, который расширяется на пару различных опций, которые превосходят различные цели. Он заслуживает внимания и не получил его.

Ответ 2

Нет, вы не можете так использовать. append - это атомная операция, которая непосредственно создает элемент.

// The <ul> element is added to #details, then it is selected and the jQuery
// selection is put in the "list" variable.
var list = $('<ul/>').appendTo('#details');
for (var i = 0; i < 10; i++) {
    // New <li> elements are created here and added to the <ul> element.
    list.append('<li>something</li>');
}

Альтернативно, сгенерируйте HTML и добавьте его сразу (это будет больше похоже на ваш исходный код):

var html = '<ul>';
for (var i = 0; i < 10; i++) {
    html += '<li>something</li>';
}
html += '</ul>';
$('#details').append(html);

Этот код заметно быстрее при работе со многими элементами.

Если вам нужна ссылка на список, просто сделайте следующее вместо $('#details').append(html);:

var list = $(html).appendTo('#details');

Ответ 3

Я думаю, что проблема в вашем цикле

for (var i = - i < 10; i++)
    $("#details").append('<li>something</li>');

Я думаю,

for (var i = 0; i < 10; i++)
    $("#details ul").append('<li>something</li>');

и потерять из конца

$("#details").append('</ul>');

Рабочий демонстрационный пример

EDIT:

На основе комментария Джорджа IV, чтобы избежать добавления элементов <li> к любому <ul>, который может быть дочерним элементом элемента с идентификатором " details", просто введите <ul> элемент id при добавлении его -

$("#details").append('<ul id="appended">');

for (var i = 0; i < 10; i++)
    $("#appended").append('<li>something</li>');

вы также можете найти эту статью интересной - 43 439 причин правильно использовать append()

Ответ 4

Для небольшого статического списка я предпочитаю разворачиваться в одно выражение.

$('#details')
   .append($('<ul/>')
      .append('<li>something</li>')
      .append('<li>something</li>')
      .append('<li>something</li>')
      .append('<li>something</li>')
      .append('<li>something</li>')
      .append('<li>something</li>')
      .append('<li>something</li>')
      .append('<li>something</li>')
      .append('<li>something</li>')
      .append('<li>something</li>')
   );

Ответ 5

Я бы использовал что-то вроде, если у вас есть данные в массиве.

var appendToUl = array.join( "

+ array +" );

Это намного быстрее