¿Cómo agregar un elemento de lista a una lista desordenada existente?


548

Tengo un código que se ve así:

<div id="header">
    <ul class="tabs">
        <li><a href="/user/view"><span class="tab">Profile</span></a></li>
        <li><a href="/user/edit"><span class="tab">Edit</span></a></li>
    </ul>
</div>

Me gustaría usar jQuery para agregar lo siguiente a la lista:

<li><a href="/user/messages"><span class="tab">Message Center</span></a></li>

Intenté esto:

$("#content ul li:last").append("<li><a href="/user/messages"><span class="tab">Message Center</span></a></li>");

Pero eso agrega lo nuevo li dentro del último li(justo antes de la etiqueta de cierre), no después. ¿Cuál es la mejor manera de agregar esto li?

Respuestas:


816

Esto lo haría:

$("#header ul").append('<li><a href="https://stackoverflow.com/user/messages"><span class="tab">Message Center</span></a></li>');

Dos cosas:

  • Simplemente puede agregar el <li>a la <ul>misma.
  • Necesita usar el tipo opuesto de citas que el que está usando en su HTML. Entonces, como está usando comillas dobles en sus atributos, rodee el código con comillas simples.

66
¿No debería ser '#header' en lugar de '#content'?
Dipak

15
solo como una nota al margen, puede usar anteponer en lugar de agregar en caso de que desee agregar como el primer elemento en lugar del último
Thomas

517

También puede hacerlo de forma más 'objetiva' y aún fácil de leer:

$('#content ul').append(
    $('<li>').append(
        $('<a>').attr('href','/user/messages').append(
            $('<span>').attr('class', 'tab').append("Message center")
)));    

No tienes que pelear con citas, pero debes mantener un rastro de llaves :)


¿Su enfoque no iniciaría nuevas etiquetas pero no las cerraría?
Everton

1
No, jquery crea etiquetas utilizando la manipulación DOM, por lo que solo tiene que saber su nombre
Danubian Sailor

Me encanta esto. Odio jugar con cadenas y citas :) Por cierto: Otra opción sería stackoverflow.com/a/4673436/112000
Tomáš Fejfar

2
Esta es, con mucho, la forma más preferible, es utilizar la forma más orientada a objetos.
Será el

¿Hay alguna para agregar múltiples al mismo tiempo?
tyan

51

¿Qué tal usar "después" en lugar de "agregar".

$("#content ul li:last").after('<li><a href="https://stackoverflow.com/user/messages"><span class="tab">Message Center</span></a></li>');

".after ()" puede insertar contenido, especificado por el parámetro, después de cada elemento en el conjunto de elementos coincidentes.


3
Gracias, esto me ayudó. Para insertar en el medio de una lista, debe usar beforeo after.
Patrick Fisher

1
esto combinado con la respuesta de @ Danubian_Sailor me dio en el clavo
bkwdesign

50

Si simplemente está agregando texto en eso li, puede usar:

 $("#ul").append($("<li>").text("Some Text."));

20

jQuery viene con las siguientes opciones que podrían satisfacer su necesidad en este caso:

appendse usa para agregar un elemento al final del padre divespecificado en el selector:

$('ul.tabs').append('<li>An element</li>');

prependse usa para agregar un elemento en la parte superior / inicio del padre divespecificado en el selector:

$('ul.tabs').prepend('<li>An element</li>');

insertAfterle permite insertar un elemento de su selección después del elemento que especifique. Su elemento creado se colocará en el DOM después de la etiqueta de cierre del selector especificado:

$('<li>An element</li>').insertAfter('ul.tabs>li:last');
will result in:
<li><a href="/user/edit"><span class="tab">Edit</span></a></li>
<li>An element</li>

insertBefore hará lo contrario de lo anterior:

$('<li>An element</li>').insertBefore('ul.tabs>li:last');
will result in:
<li>An element</li>
<li><a href="/user/edit"><span class="tab">Edit</span></a></li>

16

Debe agregar al contenedor, no el último elemento:

$("#content ul").append('<li><a href="https://stackoverflow.com/user/messages"><span class="tab">Message Center</span></a></li>');

La función append () probablemente debería haberse llamado add () en jQuery porque a veces confunde a las personas. Se podría pensar que agrega algo después del elemento dado, mientras que en realidad lo agrega al elemento.



6
$("#content ul").append('<li><a href="https://stackoverflow.com/user/messages"><span class="tab">Message Center</span></a></li>');

6
$("#content ul").append('<li><a href="https://stackoverflow.com/user/messages"><span class="tab">Message Center</span></a></li>');

Aquí hay algunos comentarios sobre la legibilidad del código (complemento descarado para un blog). http://coderob.wordpress.com/2012/02/02/code-readability

Considere separar la declaración de sus nuevos elementos de la acción de agregarlos a su UL. Se vería así:

var tabSpan = $('<span/>', {
    html: 'Message Center'
});
var messageCenterAnchor = $('<a/>', {
    href='/user/messages',
    html: tabSpan
});
var newListItem = $('<li/>', {
    html: messageCenterAnchor,
    "id": "myIDGoesHere"
});    // NOTE: you have to put quotes around "id" for IE..

$("content ul").append(newListItem);

Feliz codificación :)


var newListItem = $ ('<li />', {html: messageCenterAnchor}); ¿Cómo obtengo el li y el id?
jmogera

@ jmogera, ¿estás tratando de configurar la identificación? Si es así, puede hacerlo dentro de los {} 's. Actualicé el código anterior :)
sin lugar a dudas,

3

Esta es la forma más corta en que puedes hacer eso

list.push($('<li>', {text: blocks[i] }));
$('ul').append(list);

Donde bloques en una matriz. y necesitas recorrer la matriz.



2

fácil

// Creating and adding an element to the page at the same time.
$( "ul" ).append( "<li>list item</li>" );
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.