แม้ว่านี่จะเป็นคำถามที่เก่ามาก แต่ฉันคิดว่ามันคงจะดีถ้าได้อัพเดทกับข้อมูลล่าสุด
ตั้งแต่ jQuery 1.8 มีฟังก์ชั่นjQuery.parseHTML ()ซึ่งตอนนี้เป็นวิธีที่ต้องการในการสร้างองค์ประกอบ นอกจากนี้ยังมีปัญหาบางอย่างกับการแยกวิเคราะห์ HTML ผ่าน$('(html code goes here)')
เช่นเว็บไซต์ทางการ jQuery กล่าวถึงสิ่งต่อไปนี้ในบันทึกย่อประจำรุ่นหนึ่งรายการ :
การแยกวิเคราะห์ HTML ที่ผ่อนคลาย: คุณสามารถมีช่องว่างนำหน้าหรือขึ้นบรรทัดใหม่อีกครั้งก่อนแท็กใน $ (htmlString) เรายังคงแนะนำอย่างยิ่งให้คุณใช้ $ .parseHTML () เมื่อแยกวิเคราะห์ HTML ที่ได้รับจากแหล่งภายนอกและอาจทำการเปลี่ยนแปลงเพิ่มเติมในการแยกวิเคราะห์ HTML ในอนาคต
หากต้องการเกี่ยวข้องกับคำถามจริงสามารถแปลตัวอย่างที่ให้เป็น:
this.$OuterDiv = $($.parseHTML('<div></div>'))
.hide()
.append($($.parseHTML('<table></table>'))
.attr({ cellSpacing : 0 })
.addClass("text")
)
;
ซึ่งน่าเสียดายที่ไม่สะดวกกว่าการใช้งานเพียงอย่างเดียว$()
แต่ช่วยให้คุณควบคุมได้มากขึ้นตัวอย่างเช่นคุณอาจเลือกที่จะยกเว้นแท็กสคริปต์ (ซึ่งจะทำให้สคริปต์แบบอินไลน์เหมือนonclick
):
> $.parseHTML('<div onclick="a"></div><script></script>')
[<div onclick="a"></div>]
> $.parseHTML('<div onclick="a"></div><script></script>', document, true)
[<div onclick="a"></div>, <script></script>]
นอกจากนี้นี่คือมาตรฐานจากคำตอบที่ได้รับการปรับให้เข้ากับความเป็นจริงใหม่:
ลิงก์ JSbin
jQuery 1.9.1
$ .parseHTML: 88ms
$ ($. parseHTML): 240ms
<div> </div>: 138ms
<div>: 143ms
createElement: 64ms
ดูเหมือนว่าparseHTML
จะเข้าใกล้createElement
มากกว่า$()
แต่การเพิ่มทั้งหมดจะหายไปหลังจากห่อผลลัพธ์ในวัตถุ jQuery ใหม่