服务器端控件的jQuery选择器

7
"

$('#<%=lblName.ClientID%>')和$('[id$=lblName]')有什么区别?

"
4个回答

23

$('#<%=lblName.ClientID%>')将查找一个具有由ASP.Net的ClientID属性提供的id属性的元素。

$("[id$=lblName]")将查找一个具有以lblName结尾的id属性的元素,例如foo-lblName


1
对于任何想要选择它们之一的人,如果您有一个页面使用控件页(ascx)超过一次 - $("[id$=lblName]") 将包含多个以该名称结尾的 ID 元素。因此,在这种情况下,$('#<%=lblName.ClientID%>') 将是控件的唯一选择器。 - E.Meir

2

1

第一个选择器($('#<%=lblName.ClientID%>'))是id选择器,它将通过元素的ID查找元素。这非常快,因为它将使用本地的document.getElementById

第二个选择器Attribute Ends With selector的工作方式不同。例如,在IE中,它将获取所有元素并测试每个元素的ID是否以提供的值结尾(或类似的内容)。这要慢得多。在较新的浏览器中,可能会使用querySelectorAll来查找该选择器的元素,但我不确定该函数是否支持它(好吧,在这里它被定义为有效的css3,因此假设现代浏览器将在querySelectorAll中支持以选择器结尾)。

因此,总之,在任何情况下,id选择器应该更快,而在旧浏览器中速度更快。同时,以选择器结尾的选择器允许您在不将其客户端ID传递给浏览器的情况下查找元素。


0
今天我了解到的是,$('#<%=lblName.ClientID%>')只会选择一个元素,但是$("[id$=lblName]")会选择多个元素,所以如果你给多个元素分配了相同的ID,并且想要遍历它们中的所有元素,则第一种情况将无法正常工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接