jQuery append () - คืนองค์ประกอบที่ต่อท้าย


188

ฉันใช้jQuery.append ()เพื่อเพิ่มองค์ประกอบบางอย่างแบบไดนามิก มีวิธีใดที่จะได้รับ jQuery collection หรือ array ขององค์ประกอบที่แทรกใหม่เหล่านี้หรือไม่?

ดังนั้นฉันต้องการทำสิ่งนี้:

$("#myDiv").append(newHtml);
var newElementsAppended = // answer to the question I'm asking
newElementsAppended.effects("highlight", {}, 2000);

คำตอบ:


263

มีวิธีที่ง่ายกว่าในการทำสิ่งนี้:

$(newHtml).appendTo('#myDiv').effects(...);

สิ่งนี้จะเปลี่ยนสิ่งต่าง ๆ โดยการสร้างครั้งแรกnewHtmlด้วยjQuery(html [, ownerDocument ])แล้วใช้appendTo(target)(สังเกตToบิต "") เพื่อเพิ่มเข้าไปในส่วนท้าย#mydivเพื่อเพิ่มว่ามันถึงจุดสิ้นสุดของ

เนื่องจากตอนนี้คุณเริ่มต้นด้วย$(newHtml)ผลลัพธ์สุดท้ายappendTo('#myDiv')คือ html บิตใหม่และการ.effects(...)โทรจะอยู่ในhtml บิตใหม่เช่นกัน


2
ใช้ jQuery UI เวอร์ชัน 1.9.2 ฉันได้รับeffectsไม่ใช่ฟังก์ชั่น ... แต่effectก็คือ
Philipp M

ฉันจะเพิ่มว่ายังมีลายเซ็นอื่น: appendTo (เป้าหมายบริบท) เช่นสำหรับตัวเลือก jQuery ใด ๆ ที่อนุญาตให้ค้นหาเป้าหมาย แต่ภายในบริบทที่ระบุเท่านั้น มันจะมีประโยชน์มากถ้าคุณเขียนปลั๊กอินหรือไลบรารี
Pierpaolo Cira

1
สิ่งนี้จะทำให้เกิดข้อผิดพลาดหากnewHtmlไม่ใช่ HTML ที่ถูกต้องหรือตัวเลือก jQuery ที่ถูกต้อง: $('/ This is Not HTML /').appendTo('#myDiv')ผลลัพธ์ในUncaught Error: Syntax error, unrecognized expressionขณะที่$('#myDiv').append('/ This is Not HTML /')ทำงานอย่างถูกต้องโดยการต่อท้ายข้อความกับองค์ประกอบเป้าหมาย
โทมัส CG de Vilhena

41
// wrap it in jQuery, now it's a collection
var $elements = $(someHTML);

// append to the DOM
$("#myDiv").append($elements);

// do stuff, using the initial reference
$elements.effects("highlight", {}, 2000);

2
สิ่งนี้ไม่ได้ผลสำหรับฉันเมื่อฉันพยายามผูกเหตุการณ์กับองค์ประกอบที่ต่อท้าย ฉันใช้ var appendedTarget = $ (newHtml) .appendTo (องค์ประกอบ) ฉันสามารถผูกโดยใช้ $ (ต่อท้ายเป้าหมาย). ผูก ('keydown', someFunc)
Zac Imboden

ฉันคิดว่ามันไม่ได้$elements.effect("highlight", {}, 2000); effects
ทำไม

2
สิ่งนี้ใช้ไม่ได้เนื่องจากตัวแปร $ elements หลังจากผนวกท้ายเปลี่ยนแปลงและไม่สามารถใช้งานได้อีกต่อไป
Alex V

@AlexV ดูเหมือนว่าจะใช้งานได้ดูการสาธิตสดบนjsbin.com/xivedohofi/1/edit?html,js,outputและดูคำตอบเดียวกันกับที่ยอมรับสำหรับคำถามที่คล้ายกันstackoverflow.com/questions/1443233/ ......
Adrien Be

2
ดูเหมือนว่าพวกเขาจะแก้ไขปัญหานี้ใน jQuery เวอร์ชันใหม่
Alex V


10

เตือนเล็ก ๆ น้อย ๆเมื่อองค์ประกอบแบบไดนามิกเพิ่มฟังก์ชั่นชอบappend(), appendTo(), prepend()หรือprependTo()ส่งคืนวัตถุ jQuery ไม่องค์ประกอบ HTML DOM

การสาธิต

var container=$("div.container").get(0),
    htmlA="<div class=children>A</div>",
    htmlB="<div class=children>B</div>";

// jQuery object
alert( $(container).append(htmlA) ); // outputs "[object Object]"

// HTML DOM element
alert( $(container).append(htmlB).get(0) ); // outputs "[object HTMLDivElement]"

19
องค์ประกอบที่ส่งคืนจากผนวก () เป็นภาชนะและไม่ใช่องค์ประกอบใหม่
Tomas

0

ฉันคิดว่าคุณสามารถทำสิ่งนี้:

var $child = $("#parentId").append("<div></div>").children("div:last-child");

parent #parentId ถูกส่งคืนจากการผนวกดังนั้นเพิ่มเคียวรี jquery children เข้ากับมันเพื่อให้แทรกลูก div ล่าสุด

$ child เป็น div div ที่ jquery ซึ่งถูกเพิ่ม

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