ฉันจะรับองค์ประกอบแรกแทนที่จะใช้ [0] ใน jQuery ได้อย่างไร


95

ฉันยังใหม่กับ jQuery ขออภัยหากนี่เป็นคำถามโง่ ๆ

เมื่อฉันใช้มันค้นหาองค์ประกอบโดยใช้รหัสฉันรู้ว่ามีหนึ่งรายการที่ตรงกันเสมอและในการเข้าถึงฉันจะใช้ดัชนี [0] มีวิธีที่ดีกว่านี้หรือไม่? สำหรับเช่น

var gridHeader = $("#grid_GridHeader")[0];

คำตอบ:


101

คุณสามารถใช้.get(0)เช่นกัน แต่ ... คุณไม่ควรต้องทำที่มีองค์ประกอบที่พบโดยใช้ ID ที่ควรเสมอจะไม่ซ้ำกัน ฉันหวังว่านี่เป็นเพียงการกำกับดูแลในตัวอย่าง ... หากเป็นกรณีนี้ในเพจจริงของคุณคุณจะต้องแก้ไขเพื่อให้ ID ของคุณไม่ซ้ำกันและใช้คลาส (หรือแอตทริบิวต์อื่น) แทน

.get()(เช่น[0]) รับองค์ประกอบ DOM หากคุณต้องการใช้วัตถุ jQuery .eq(0)หรือ.first()แทน :)


17
ยกเว้นว่า$("#id") /* jQuery object */ != $("#id").get(0) /* DOM Object */
BrunoLM

9
@BrunoLM - หากคุณต้องการองค์ประกอบ DOM document.getElementById('id')อย่าสร้างวัตถุ jQuery เพียงเพื่อทิ้งมันไป ... ซึ่งเป็นการสิ้นเปลืองอย่างมากตั้งแต่เครื่องยนต์ตัวเลือกไปจนถึงเครื่องห่อวัตถุมันเป็นเพียงการใช้งานมากเกินไปโดยไม่มีเหตุผลที่ดี :)
นิค Craver

Nick ฉันเห็นด้วยบางทีฉันอาจจะค่อนข้างโง่แค่ใช้ jquery เพื่อทุกอย่าง
Rubans

2
@NickCraver - ขอบคุณสำหรับสิ่งนั้น ฉันเพิ่งเปลี่ยนพวงdocument.getElementById('id')ด้วย$('#id')[0]แต่ไม่ชอบไฟล์[0]. ความคิดเห็นของคุณเกี่ยวกับความสิ้นเปลืองทำให้ฉันคิดที่จะกำหนด$0 = function(id){return document.getElementById(id);}และตอนนี้ฉันชอบ$0('id')ดีกว่า จำนวนตัวอักษรเท่า$('#id')กันฉันแค่หวังว่ามันจะเป็น$#('id')
Bruno Bronosky

2
หวังว่าจะมีรูปแบบของวิธีการเหล่านี้ที่ส่งคืนค่าเท็จจากชุดผลลัพธ์ว่าง
Stephen M. Harris

27

$("#grid_GridHeader:first") ทำงานได้ดี


3
ฉันคิดว่านี่เป็นวิธีที่ดีที่สุดในการจัดการปัญหาของคุณที่นี่ มันอ่านได้ดีเมื่อเทียบกับ. eq (0)
Dave Gregory

มันเป็นวิธีที่ดีที่สุดเพื่อเหตุผลด้านประสิทธิภาพเกินไป (เช่นเมื่อคุณมีตาราง 1000 แถวไม่จำเป็นต้องสร้างวัตถุ jQuery จากทั้งหมดของพวกเขา)
อเล็กซ์

18

คุณสามารถใช้วิธีแรก:

$('li').first()

http://api.jquery.com/first/

btw ฉันเห็นด้วยกับ Nick Craver - ใช้ document.getElementById () ...


1
สิ่งนี้จะส่งคืนอาร์เรย์ว่างหากไม่พบองค์ประกอบ โปรดใช้ความระมัดระวังในการใช้คำสั่งตรรกะตามที่[]จะtrueประเมิน
Ashley

4

ด้วยสมมติฐานว่ามีองค์ประกอบเดียว:

 $("#grid_GridHeader")[0]
 $("#grid_GridHeader").get(0)
 $("#grid_GridHeader").get()

... มีค่าเท่ากันทั้งหมดโดยส่งคืนองค์ประกอบพื้นฐานเดียว

จากซอร์สโค้ด jQuery คุณจะเห็นว่าget(0)ภายใต้ฝาครอบนั้นทำสิ่งเดียวกันกับ[0]วิธีการ:

 // Return just the object
 ( num < 0 ? this.slice(num)[ 0 ] : this[ num ] );

ขอบคุณสำหรับทุกอย่างที่ใช้งานได้นอกเหนือจาก get () ซึ่งดูเหมือนจะไม่ได้รับรายการแรก
Rubans

จริงๆแล้วฉันเห็นได้จากคำตอบของ Nick Crave ว่าทำไมมันถึงใช้ไม่ได้
Rubans


3

คุณสามารถใช้ตัวเลือกแรก

var header = $('.header:first')

ส่งคืนอาร์เรย์ที่มีองค์ประกอบเดียว
Nitin

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