มีselector
ที่ฉันสามารถค้นหาองค์ประกอบที่มี ID ที่ลงท้ายด้วยสตริงที่กำหนดหรือไม่
ว่าฉันมีองค์ประกอบที่มี ID ctl00$ContentBody$txtTitle
ของ ฉันจะได้รับสิ่งนี้โดยผ่านเพียงแค่txtTitle
?
ClientIDMode=static
จาก ASP.Net 4.0 เป็นต้นไปและกำจัดสิ่งนี้ :)
มีselector
ที่ฉันสามารถค้นหาองค์ประกอบที่มี ID ที่ลงท้ายด้วยสตริงที่กำหนดหรือไม่
ว่าฉันมีองค์ประกอบที่มี ID ctl00$ContentBody$txtTitle
ของ ฉันจะได้รับสิ่งนี้โดยผ่านเพียงแค่txtTitle
?
ClientIDMode=static
จาก ASP.Net 4.0 เป็นต้นไปและกำจัดสิ่งนี้ :)
คำตอบ:
หากคุณทราบประเภทองค์ประกอบแล้ว: (เช่น: แทนที่ 'องค์ประกอบ' ด้วย 'div')
$("element[id$='txtTitle']")
หากคุณไม่ทราบประเภทองค์ประกอบ:
$("[id$='txtTitle']")
document.getElementById("f:fTest:j_idt51:0:inpTest")
นี้พบว่าองค์ประกอบ $("[id$='inpTest']")
นี้ไม่ได้ เป็นเพราะโคลอนไม่ได้รับอนุญาตใน ID (แต่ JSF เพิ่ม!)?
คำตอบของคำถามคือ$("[id$='txtTitle']")
, มาร์ค Hurd ตอบแต่สำหรับผู้ที่ชอบก็ต้องการที่จะหาองค์ประกอบทั้งหมดที่มี ID ซึ่งเริ่มต้นด้วยสตริงที่กำหนด (เช่น txtTitle) ลองนี้ ( doc ):
$("[id^='txtTitle']")
หากคุณต้องการเลือกองค์ประกอบที่ id มีสตริงที่กำหนด ( doc ):
$("[id*='txtTitle']")
หากคุณต้องการเลือกองค์ประกอบที่ id ไม่ใช่สตริงที่ระบุ ( doc ):
$("[id!='myValue']")
(มันยังตรงกับองค์ประกอบที่ไม่มีแอตทริบิวต์ที่ระบุ)
หากคุณต้องการเลือกองค์ประกอบที่ id มีคำที่กำหนดคั่นด้วยช่องว่าง ( doc ):
$("[id~='myValue']")
หากคุณต้องการเลือกองค์ประกอบที่เป็น เท่ากับสตริงที่กำหนดหรือเริ่มต้นด้วยสตริงนั้นตามด้วยยัติภังค์ ( doc ):
$("[id|='myValue']")
ลอง
$("element[id$='txtTitle']");
แก้ไข: 4 วินาทีล่าช้า: P
$('element[id$=txtTitle]')
ไม่จำเป็นอย่างยิ่งที่จะต้องอ้างถึงส่วนของข้อความที่คุณจับคู่
การเพิ่มเครื่องหมายขีดล่างหรือ $ ให้กับคำที่คุณค้นหาปลอดภัยกว่าจึงมีความเป็นไปได้น้อยที่จะจับคู่องค์ประกอบอื่น ๆ ที่ลงท้ายด้วย ID เดียวกัน:
$("element[id$=_txtTitle]")
(ที่องค์ประกอบคือประเภทขององค์ประกอบที่คุณกำลังพยายามที่จะหา - เช่นdiv
, input
ฯลฯ
(หมายเหตุคุณแนะนำให้ ID ของคุณมักจะมีเครื่องหมาย $ ในพวกเขา แต่ฉันคิดว่าตอนนี้. NET 2 มีแนวโน้มที่จะใช้ขีดเส้นใต้ใน ID แทนดังนั้นตัวอย่างของฉันจึงใช้เครื่องหมายขีดล่าง)
ตัวอย่าง: เพื่อเลือกทั้งหมด<a>
ที่มี ID ที่ลงท้ายด้วย _edit:
jQuery("a[id$=_edit]")
หรือ
jQuery("a[id$='_edit']")
เนื่องจากนี่คือ ASP.NET คุณสามารถใช้แท็ก ASP <% =%> เพื่อพิมพ์ ClientID ที่สร้างขึ้นของ txtTitle:
$('<%= txtTitle.ClientID %>')
สิ่งนี้จะส่งผลให้ ...
$('ctl00$ContentBody$txtTitle')
... เมื่อหน้าถูกแสดงผล
หมายเหตุ: ใน Visual Studio Intellisense จะตะโกนใส่แท็ก ASP ใน JavaScript คุณสามารถละเว้นสิ่งนี้ได้เนื่องจากผลลัพธ์คือ JavaScript ที่ถูกต้อง
'ctl00$ContentBody$txtTitle'
เขามี'txtTitle'
, และคุณจะหายไปชั้นนำ#
เพื่อให้ตรงกับรหัส แต่ OP ได้ปฏิเสธคำแนะนำที่คล้ายกัน (ตั้งแต่ลบ): มันจะไม่ทำงานเว้นแต่ฉันจะใส่ Javascript ของฉันโดยตรงในมาร์กอัปซึ่งเป็นฝันร้ายขององค์กร การแยกพฤติกรรมเป็นสิ่งสำคัญสำหรับโครงการนี้
ลองสิ่งนี้:
<asp:HiddenField ID="0858674_h" Value="0" runat="server" />
var test = $(this).find('[id*="_h"').val();
เพื่อหารหัส iframe ที่ลงท้ายด้วย "iFrame" ในหน้าเว็บที่มี iframe จำนวนมาก
jQuery(document).ready(function (){
jQuery("iframe").each(function(){
if( jQuery(this).attr('id').match(/_iFrame/) ) {
alert(jQuery(this).attr('id'));
}
});
});