Eu estou tentando usar a função append e encontrei isso:
$("#details").append("<ul>");
for (var i = 0; i < 10; i++) {
$("#details").append("<li>something</li>");
}
$("#details").append("</ul>");
Parece que o <li>
elementos processa FORA do <ul>
tag.
Isso é um bug do jQuery?
Respostas:
60 para resposta № 1Não, é um erro do programador. <li>
s estão ligados ao seu <ul>
ou <ol>
, não ao seu recipiente. E acrescentar uma tag de fechamento é sem sentido.
Você está basicamente trabalhando como se o que você estava anexando fosse HTML bruto, e não é; você está realmente trabalhando com o DOM.
Tente isto:
var list = $("#details").append("<ul></ul>").find("ul");
for (var i = 0; i < 10; i++)
list.append("<li>something</li>");
Nota: por favor, veja (e upvote) a resposta de Blixt, que expande algumas opções diferentes que são superiores para vários propósitos. Ele merece atenção e não está conseguindo.
89 para resposta № 2
Não, você não pode usá-lo assim. append
é uma operação atômica, que cria o elemento diretamente.
// 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>");
}
Alternativamente, gere o HTML e adicione tudo de uma vez (isso será mais parecido com o seu código original):
var html = "<ul>";
for (var i = 0; i < 10; i++) {
html += "<li>something</li>";
}
html += "</ul>";
$("#details").append(html);
Este código é visivelmente mais rápido quando se lida com muitos elementos.
Se você precisar de uma referência para a lista, faça o seguinte em vez de $("#details").append(html);
:
var list = $(html).appendTo("#details");
6 para resposta № 3
Eu acho que há um problema no seu loop
for (var i = - i < 10; i++)
$("#details").append("<li>something</li>");
deve ser eu acho
for (var i = 0; i < 10; i++)
$("#details ul").append("<li>something</li>");
e perder o seguinte a partir do final
$("#details").append("</ul>");
EDITAR:
Baseado no comentário de George IV, a fim de evitar acrescentar <li>
elementos para qualquer <ul>
que pode ser um filho do elemento com id "detalhes", simplesmente dê o <ul>
element an id quando você adiciona
$("#details").append("<ul id="appended">");
for (var i = 0; i < 10; i++)
$("#appended").append("<li>something</li>");
você também pode achar este artigo interessante - 43.439 razões para usar append () corretamente
1 para resposta № 4
Para uma pequena lista estática, prefiro me desdobrar em uma única expressão.
$("#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>")
);
-1 para resposta № 5
Eu usaria algo como se você tivesse os dados em uma Matriz.
var appendToUl = array.join ("
É muito mais rápido