How to add a list item to an existing unordered list

JqueryJquery Append

Jquery Problem Overview


I have code that looks like this:

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

I'd like to use jQuery to add the following to the list:

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

I tried this:

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

But that adds the new li inside the last li (just before the closing tag), not after it. What's the best way to add this li?

Jquery Solutions


Solution 1 - Jquery

This would do it:

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

Two things:

  • You can just append the <li> to the <ul> itself.
  • You need to use the opposite type of quotes than what you're using in your HTML. So since you're using double quotes in your attributes, surround the code with single quotes.

Solution 2 - Jquery

You can also do it in a more 'object' and still easy-to-read way:

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

You don't have to fight with quotes then, but you must keep trace of braces :)

Solution 3 - Jquery

If you are simply adding text in that li, you can use:

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

Solution 4 - Jquery

How about using "after" instead of "append".

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

".after()" can insert content, specified by the parameter, after each element in the set of matched elements.

Solution 5 - Jquery

jQuery comes with the following options which could fulfil your need in this case:

append is used to add an element at the end of the parent div specified in the selector:

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

prepend is used to add an element at the top/start of the parent div specified in the selector:

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

insertAfter lets you insert an element of your selection next after an element you specify. Your created element will then be put in the DOM after the specified selector closing tag:

$('<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 will do the opposite of the above:

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

Solution 6 - Jquery

You should append to the container, not the last element:

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

The append() function should've probably been called add() in jQuery because it sometimes confuses people. You would think it appends something after the given element, while it actually adds it to the element.

Solution 7 - Jquery

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

Solution 8 - Jquery

Instead of

$("#header ul li:last")

try

$("#header ul")

Solution 9 - Jquery

Use:

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

Here is some feedback regarding code readability (shameless plug for a blog). http://coderob.wordpress.com/2012/02/02/code-readability

Consider separating the declaration of your new elements from the action of adding them to your UL.. It would look something like this:

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

Solution 10 - Jquery

Use:

// Creating and adding an element to the page at the same time.
$("ul").append("<li>list item</li>");

Solution 11 - Jquery

This is the shortest way you can do that:

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

Where blocks is an array. And you need to loop through the array.

Solution 12 - Jquery

This is another one

$("#header ul li").last().html('<li> Menu 5 </li>');

Solution 13 - Jquery

Just to add to this thread - if you are moving an existing item you will need to use clone and then true/false on whether you clone/deep-clone the events as well (https://api.jquery.com/clone/).

Example: $("#content ul").append($('.existing_li').clone(true));

Solution 14 - Jquery

Add li in ul as first item using prepend() function of jquery

$("ul").prepend("<li>first item</li>");

Add li in ul as last item using append() function of jquery

$("ul").append("<li>last item</li>");

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionEileenView Question on Stackoverflow
Solution 1 - JqueryPaolo BergantinoView Answer on Stackoverflow
Solution 2 - JqueryDanubian SailorView Answer on Stackoverflow
Solution 3 - Jquerykravits88View Answer on Stackoverflow
Solution 4 - JquerysatomacotoView Answer on Stackoverflow
Solution 5 - JqueryOle HaugsetView Answer on Stackoverflow
Solution 6 - JqueryPhilippe LeybaertView Answer on Stackoverflow
Solution 7 - JqueryEvan MeagherView Answer on Stackoverflow
Solution 8 - JqueryAdrian GodongView Answer on Stackoverflow
Solution 9 - JqueryundeniablyrobView Answer on Stackoverflow
Solution 10 - JqueryKaleem UllahView Answer on Stackoverflow
Solution 11 - Jqueryuser3516328View Answer on Stackoverflow
Solution 12 - JqueryMahendra JellaView Answer on Stackoverflow
Solution 13 - JqueryAntonyView Answer on Stackoverflow
Solution 14 - JquerydevView Answer on Stackoverflow