Come aggiungere una voce di elenco a una lista non ordinata esistente?


548

Ho un codice simile al seguente:

<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>

Vorrei usare jQuery per aggiungere quanto segue all'elenco:

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

Ho provato questo:

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

Ma questo aggiunge il nuovo li all'interno dell'ultimo li(poco prima del tag di chiusura), non dopo. Qual è il modo migliore per aggiungere questo li?

Risposte:


816

Questo lo farebbe:

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

Due cose:

  • Puoi semplicemente aggiungere il <li>a <ul>se stesso.
  • Devi usare il tipo di virgolette opposto rispetto a quello che stai usando nel tuo HTML. Quindi, poiché stai usando virgolette doppie nei tuoi attributi, circonda il codice con virgolette singole.

6
Non dovrebbe essere "#header" anziché "#content"?
Dipak,

15
proprio come nota a margine, puoi usare prepend invece di append nel caso in cui desideri aggiungere come primo elemento anziché l'ultimo
Thomas

517

Puoi farlo anche in modo più "oggettivo" e comunque di facile lettura:

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

Allora non devi combattere con le virgolette, ma devi tenere traccia delle parentesi graffe :)


Il tuo approccio non avrebbe avviato nuovi tag ma non li avrebbe chiusi?
Everton,

1
No, jquery crea tag usando la manipolazione DOM, quindi deve solo sapere il suo nome
Danubian Sailor,

Amo questo. Odio fare scherzi con le stringhe e citazioni :) BTW: altra opzione sarebbe quella stackoverflow.com/a/4673436/112000
Tomáš Fejfar

2
Questo è di gran lunga il modo più preferibile, cioè quello di utilizzare il modo più orientato agli oggetti.
Sarà il

C'è qualche da appendere multi contemporaneamente?
tyan,

51

Che ne dici di usare "after" invece di "append".

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

".after ()" può inserire contenuto, specificato dal parametro, dopo ogni elemento nell'insieme di elementi corrispondenti.


3
Grazie, questo mi ha aiutato. Per inserire al centro di un elenco, è necessario utilizzare beforeo after.
Patrick Fisher,

1
questo combinato con la risposta di @ Danubian_Sailor mi ha colpito nel segno
bkwdesign

50

Se stai semplicemente aggiungendo del testo li, puoi usare:

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

20

jQuery viene fornito con le seguenti opzioni che potrebbero soddisfare le tue esigenze in questo caso:

appendviene utilizzato per aggiungere un elemento alla fine del genitore divspecificato nel selettore:

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

prependviene utilizzato per aggiungere un elemento all'inizio / all'inizio del genitore divspecificato nel selettore:

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

insertAfterconsente di inserire un elemento della selezione dopo un elemento specificato. L'elemento creato verrà quindi inserito nel DOM dopo il tag di chiusura del selettore specificato:

$('<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 farà il contrario di quanto sopra:

$('<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

È necessario aggiungere al contenitore, non l'ultimo elemento:

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

La funzione append () avrebbe probabilmente dovuto essere chiamata add () in jQuery perché a volte confonde le persone. Penseresti che accoda qualcosa dopo l'elemento dato, mentre in realtà lo aggiunge all'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>');

Ecco alcuni feedback sulla leggibilità del codice (spina spudorata per un blog). http://coderob.wordpress.com/2012/02/02/code-readability

Prendi in considerazione la possibilità di separare la dichiarazione dei tuoi nuovi elementi dall'azione di aggiungerli al tuo UL. Sarebbe simile a questo:

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);

Buona programmazione :)


var newListItem = $ ('<li />', {html: messageCenterAnchor}); Come ottengo il li e l'ID?
Jmogera,

@jmogera, stai cercando di impostare l'id? In tal caso, puoi semplicemente farlo all'interno di {}. Ho aggiornato il codice sopra :)
innegabilmente

3

Questo è il modo più breve per farlo

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

Dove blocchi in un array. ed è necessario passare in rassegna l'array.



2

facile

// Creating and adding an element to the page at the same time.
$( "ul" ).append( "<li>list item</li>" );
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.