ค้นหาองค์ประกอบ html ที่ id ขึ้นต้นด้วย


89

คำถามของฉันคือ:

ฉันมีโค้ด HTML ในหลายหน้าในแต่ละหน้าฉันใช้ JQgrid (jquery grid) เพื่อแสดงข้อมูลบางอย่าง ฉันรู้ว่าในแต่ละหน้าองค์ประกอบที่เก็บ JQgrid ถูกตั้งชื่อเป็น "LIST_xxx" ตอนนี้ฉันต้องสร้างจาวาสคริปต์ที่ใช้องค์ประกอบนั้น "LIST_XXXX" ในแต่ละหน้าและทำบางอย่าง ฉันจะค้นหาองค์ประกอบด้วย ID ได้อย่างไร แต่รู้เฉพาะส่วนเริ่มต้น (ของ ID เช่นที่ฉันกล่าวไว้ก่อนหน้านี้):

$('#list_[XXXX]')... --> The part surrounded by [] is variable on each page, i want to discriminate that.

ฉันหวังว่าฉันจะทำให้ตัวเองชัดเจน ขอบคุณ.

คำตอบ:


173

ลอง

$('div[id^="list_"]')

มันควรจะทำงาน


เค้าโครงที่ดีกว่าในการอ้างอิงนั้นมากกว่าเอกสาร jquery
Yuriy Faktorovich

ใช้งานได้ดีขอบคุณ ... ฉันใช้มันเพื่อค้นหา id ที่ลงท้ายด้วยค่าเฉพาะเช่น if ($ ('div [id $ = "' + val + '"]') length> 0) รันบางสิ่ง;
raphie

ดีมันทำงานได้ดีสำหรับรหัสควบคุมง่ายๆข้างต้น วิธีทำให้มันใช้งานได้กับสถานการณ์เช่นฉันมีการควบคุมด้วย ID เช่น "txt_0_city", "txt_1_city", "txt_2_city", "txt_3_city" เป็นต้นและฉันต้องการให้จำนวนองค์ประกอบทั้งหมดที่มี ID เช่น "txt _ * _ city "
Rajiv Bhardwaj

@Rajiv ถ้าคุณสามารถควบคุม html ได้ก็จะเป็นการดีที่จะเพิ่มคลาสเช่น "เมือง" ให้กับแต่ละองค์ประกอบเหล่านั้น จากนั้นคุณสามารถนับได้อย่างง่ายดาย
Glen Little

@Rajiv หากคุณไม่สามารถปรับปรุง html ได้ให้ตรวจสอบapi.jquery.com/multiple-attribute-selector - คุณสามารถรวมตัวเลือกได้ ตัวอย่างเช่น $ ("span [id ^ = 'txt _'] [id $ = '_ city']")
Glen Little

22

คุณต้องใช้แอตทริบิวต์ที่ขึ้นต้นด้วยตัวเลือกดังนี้:

$('[id^=list_]').whatever()

ดีมันทำงานได้ดีสำหรับรหัสควบคุมง่ายๆข้างต้น วิธีทำให้มันใช้งานได้กับสถานการณ์เช่นฉันมีการควบคุมด้วย ID เช่น "txt_0_city", "txt_1_city", "txt_2_city", "txt_3_city" เป็นต้นและฉันต้องการให้จำนวนองค์ประกอบทั้งหมดที่มี ID เช่น "txt _ * _ city "
Rajiv Bhardwaj

สวัสดี @Rajiv ยินดีต้อนรับสู่ stackoverflow ฉันตอบกลับสำเนาความคิดเห็นของคุณแล้ว
Glen Little

8

ตั้งชื่อคลาสให้กับองค์ประกอบนั้นหรือแอตทริบิวต์อื่น ๆ ที่คุณสามารถค้นหาได้


สวัสดีขอบคุณสำหรับคำตอบปัญหาเกี่ยวกับคำแนะนำของคุณคืออาจมีหลายตารางที่ถือ JQgrid ดังนั้นจึงอาจมี: "LIST_customer", "LIST_carrier" ... เป็นต้น และฉันต้องเลือกทั้งสองอย่างโดยพิจารณาจากส่วน ID เริ่มต้นเท่านั้น: "LIST_"
lidermin

1
ฉันเข้าใจ แต่การทำให้เป็นคลาส List ทั้งหมดดูเหมือนจะเป็นแนวทางที่อ่านง่ายและอธิบายได้มากกว่าสำหรับฉัน สำหรับแต่ละคนคุณสามารถใช้ start with selector ใน jquery ได้เสมอตามที่แสดงโดยคำตอบอื่น ๆ
Yuriy Faktorovich

@lidermin สิ่งที่ Yuriy บอกว่าควรใช้งานได้จริง ทำไมคุณไม่เพิ่มคลาสให้กับคอนโทรลของคุณเช่น "list" เนื่องจากคุณมี list_ เป็นคำนำหน้า ดังนั้นเมื่อคุณเลือกคลาสนั้นก็จะได้รับการควบคุมแต่ละอย่าง นี่จะเป็นวิธีที่มีประสิทธิภาพมากที่สุด
Josh Mein

คำตอบของ Yuriy จะได้ผล คุณสามารถเพิ่มระดับเดียวกัน (เช่น "ListsINeedToFind") เพื่อ "LIST_XXXX" $('.ListsINeedToFind')องค์ประกอบของคุณทั้งหมดแล้วดูพวกเขาใช้
Annabelle

บางครั้งจำเป็นต้องมีหลายองค์ประกอบที่มีคลาสเดียวกัน แต่มีรหัสต่างกัน
Vincent

5

ใช้ "แอตทริบิวต์เริ่มต้นด้วย" ตัวเลือกhttp://api.jquery.com/attribute-starts-with-selector/

$("[id^=list_]")

โปรดทราบว่าสิ่งนี้ไม่มีประสิทธิภาพ นำหน้าด้วยชื่อแท็กและลงมาจากพาเรนต์ที่ใกล้ที่สุดถ้าเป็นไปได้


1

เพื่อให้ได้องค์ประกอบที่ลงท้ายด้วย id / อักขระบางตัว

find('[id$=someid]')

เพื่อให้ได้องค์ประกอบที่เริ่มต้นด้วย id / อักขระบางตัว

find('[id*=anotherid]')

เพื่อให้องค์ประกอบที่ตรงกับรหัส / อักขระบางตัว

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