วิธีเพิ่มรายการในรายการที่ไม่มีการเรียงลำดับที่มีอยู่


548

ฉันมีรหัสที่มีลักษณะเช่นนี้:

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

ฉันต้องการใช้ jQuery เพื่อเพิ่มรายการต่อไปนี้ในรายการ:

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

ฉันลองสิ่งนี้:

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

แต่นั่นเป็นการเพิ่มสิ่งใหม่li ภายในครั้งล่าสุดli(ก่อนหน้าแท็กปิด) ไม่ใช่หลังจากนั้น วิธีเพิ่มที่ดีที่สุดคือliอะไร

คำตอบ:


816

สิ่งนี้จะทำ:

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

สองสิ่ง:

  • คุณก็สามารถผนวก<li>กับ<ul>ตัวเอง
  • คุณต้องใช้เครื่องหมายคำพูดประเภทตรงข้ามกับสิ่งที่คุณใช้ใน HTML ของคุณ ดังนั้นเมื่อคุณใช้เครื่องหมายคำพูดคู่ในแอตทริบิวต์ของคุณให้ล้อมรอบโค้ดด้วยเครื่องหมายคำพูดเดี่ยว

6
ไม่ควรเป็น '#header' แทนที่จะเป็น '#content'
Dipak

15
เช่นเดียวกับบันทึกย่อด้านข้างคุณสามารถใช้ prepend แทนการผนวกในกรณีที่คุณต้องการเพิ่มเป็นองค์ประกอบแรกแทนที่จะเป็นครั้งสุดท้าย
Thomas

517

คุณสามารถทำได้ใน 'ทางวัตถุ' และยังอ่านง่าย:

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

คุณไม่ต้องต่อสู้กับคำพูดในตอนนั้น แต่ต้องเก็บเครื่องหมายวงเล็บไว้ :)


แนวทางของคุณจะไม่เริ่มแท็กใหม่ แต่จะไม่ปิดแท็กเหล่านั้นหรือ
Everton

1
ไม่ jquery สร้างแท็กโดยใช้การจัดการ DOM ดังนั้นจึงมีเพียงรู้ว่าชื่อ
Danubian Sailor

ฉันรักสิ่งนี้. ฉันเกลียดการล้อเล่นกับสตริงและคำพูด :) BTW: ตัวเลือกอื่นจะเป็นstackoverflow.com/a/4673436/112000
Tomáš Fejfar

2
นี่คือวิธีที่นิยมใช้มากกว่านั่นคือใช้วิธีเชิงวัตถุมากขึ้น
จะ

มีผู้ใดบ้างที่จะมาทานหลายคนในเวลาเดียวกันได้หรือไม่?
tyan

51

วิธีการเกี่ยวกับการใช้ "after" แทน "ผนวก"

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

".after ()" สามารถแทรกเนื้อหาที่ระบุโดยพารามิเตอร์หลังจากแต่ละองค์ประกอบในชุดขององค์ประกอบที่ตรงกัน


3
ขอบคุณสิ่งนี้ช่วยฉัน เพื่อแทรกลงในช่วงกลางของรายการที่คุณจำเป็นต้องใช้หรือbefore after
แพทริคฟิชเชอร์

1
สิ่งนี้รวมกับคำตอบของ @ Danubian_Sailor ที่ตรงประเด็นสำหรับฉัน
bkwdesign

50

หากคุณเพียงแค่เพิ่มข้อความในนั้นliคุณสามารถใช้:

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

20

jQuery มาพร้อมกับตัวเลือกต่อไปนี้ซึ่งสามารถตอบสนองความต้องการของคุณในกรณีนี้:

appendใช้เพื่อเพิ่มองค์ประกอบที่ส่วนท้ายของพาเรนต์ที่divระบุในตัวเลือก:

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

prependจะใช้เพื่อเพิ่มองค์ประกอบที่ด้านบน / เริ่มต้นของผู้ปกครองที่divระบุไว้ในตัวเลือก:

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

insertAfterให้คุณแทรกองค์ประกอบที่คุณเลือกถัดจากองค์ประกอบที่คุณระบุ องค์ประกอบที่สร้างขึ้นของคุณจะถูกวางใน DOM หลังจากแท็กปิดตัวเลือกที่ระบุ:

$('<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 จะทำตรงข้ามกับด้านบน:

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

คุณควรต่อท้ายคอนเทนเนอร์ไม่ใช่องค์ประกอบสุดท้าย:

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

ผนวก ()ฟังก์ชั่นควรจะได้รับอาจเรียกว่าเพิ่ม ()ใน jQuery เพราะบางครั้งมันก็สร้างความสับสนให้ผู้คน คุณจะคิดว่ามันจะผนวกบางสิ่งหลังจากองค์ประกอบที่กำหนดในขณะที่มันเพิ่มเข้าไปในองค์ประกอบจริง




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

นี่คือข้อเสนอแนะบางประการเกี่ยวกับการอ่านรหัส (ปลั๊กที่ไร้ยางอายสำหรับบล็อก) http://coderob.wordpress.com/2012/02/02/code-readability

พิจารณาแยกการประกาศองค์ประกอบใหม่ของคุณจากการเพิ่มองค์ประกอบลงใน UL ของคุณมันจะมีลักษณะดังนี้:

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

Happy coding :)


var newListItem = $ ('<li />', {html: messageCenterAnchor}); ฉันจะรับ li และ id ได้อย่างไร
jmogera

@jmogera คุณพยายามตั้งรหัสหรือไม่ หากเป็นเช่นนั้นคุณสามารถทำได้ภายใน {} ฉันปรับปรุงโค้ดข้างต้น :)
undeniablyrob

3

นี่เป็นวิธีที่สั้นที่สุดที่คุณสามารถทำได้

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

ที่บล็อกในอาร์เรย์ และคุณต้องวนลูปผ่านอาร์เรย์



โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.