Mevcut bir sıralanmamış listeye liste öğesi nasıl eklenir?


548

Şöyle görünüyor kodu var:

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

Listeye aşağıdakileri eklemek için jQuery kullanmak istiyorum:

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

Bunu denedim:

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

Ama bu yeni ekler li içini son lideğil, ondan sonra (kapanış etiketinden hemen önce). Bunu eklemenin en iyi yolu nedir li?

Yanıtlar:


816

Bunu yapar:

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

İki şey:

  • Sadece ekleyebilirsiniz <li>için <ul>kendisi.
  • HTML'nizde kullandığınızdan farklı türde alıntılar kullanmanız gerekir. Niteliklerinizde çift tırnak kullandığınız için, kodu tek tırnak işaretleri içine alın.

6
'#Content' yerine '#header' olmamalı mı?
Dipak

15
Yan not olarak, son yerine ilk öğe olarak eklemek istediğinizde ekleme yerine prepend kullanabilirsiniz
Thomas

517

Bunu daha 'nesne şeklinde' ve yine de okunması kolay bir şekilde yapabilirsiniz:

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

O zaman tırnak işaretleri ile savaşmak zorunda değilsiniz, ancak diş teli izini tutmak gerekir :)


Yaklaşımınız yeni etiketler başlatmaz, onları kapatmaz mı?
everton

1
Hayır, jquery DOM manipülasyonunu kullanarak etiketler oluşturur, bu yüzden sadece adını bilmelidir
Danubian Sailor

Bunu seviyorum. Dizelerle ve tırnaklarla
uğraşmaktan

2
Bu çok daha tercih edilen yol, yani daha nesne yönelimli bir şekilde kullanmaktır.
Will

Aynı anda çoklu apend için herhangi bir var mı ??
tyan

51

"Append" yerine "after" kullanmaya ne dersiniz?

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

".after ()", eşleşen öğeler kümesindeki her öğeden sonra parametre tarafından belirtilen içeriği ekleyebilir.


3
Teşekkür ederim, bu bana yardımcı oldu. Bir listenin ortasına eklemek için beforeveya tuşunu kullanmanız gerekir after.
Patrick Fisher

1
bu @ Danubian_Sailor'un cevabı ile birleştiğinde benim için isabet aldı
bkwdesign

50

Buna sadece metin ekliyorsanız liaşağıdakileri kullanabilirsiniz:

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

20

jQuery, bu durumda ihtiyacınızı karşılayabilecek aşağıdaki seçeneklerle birlikte gelir:

appenddivseçicide belirtilen üst öğenin sonuna bir öğe eklemek için kullanılır :

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

prependdivseçicide belirtilen üst öğenin üstüne / başına bir öğe eklemek için kullanılır :

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

insertAfterbelirttiğiniz bir öğenin arkasına seçiminizin bir öğesini eklemenizi sağlar. Oluşturulan öğeniz daha sonra belirtilen seçici kapanış etiketinden sonra DOM'a yerleştirilir:

$('<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 yukarıdakilerin tersini yapacak:

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

Son öğeye değil, kaba eklemelisiniz:

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

Append () fonksiyonu muhtemelen çağırıldım gereken eklenti () bazen insanların kafasını karıştıran çünkü jQuery. Verilen öğeye bir şey eklediğini düşünürken , öğeye aslında ekler .



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

Kod Okunabilirliği (bir blog için utanmaz fiş) ile ilgili bazı geri bildirimler. http://coderob.wordpress.com/2012/02/02/code-readability

Yeni öğelerinizin beyanını, bunları UL'nize ekleme eyleminden ayırmayı düşünün. Bu gibi görünecektir:

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

Mutlu kodlama :)


var newListItem = $ ('<li />', {html: messageCenterAnchor}); Li ve kimliği nasıl edinebilirim?
jmogera

@jmogera, kimliği ayarlamaya mı çalışıyorsun? Eğer öyleyse, bunu sadece {} 'in içinde yapabilirsiniz. Yukarıdaki kodu güncelledim :)
undeniablyrob

3

Bunu yapmanın en kısa yolu budur

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

Bir dizideki bloklar nerede. ve dizi boyunca döngü yapmalısınız.



2

kolay

// Creating and adding an element to the page at the same time.
$( "ul" ).append( "<li>list item</li>" );
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.