2012-12-05 3 views
6

$('#<%=lblName.ClientID%>')$("[id$=lblName]")의 차이점은 무엇입니까?jQuery 서버 측 제어를위한 선택자

+1

은 lblName a typo입니까? ($ ("[id $ = lblName]")')은 하나 이상의 요소를 포함 할 것입니다. 만약 당신이 제어 페이지 (ascx)를 한 번 더 사용하는 페이지를 가지고 있다면, 그 중 하나를 선택하고자하는 사람은 – dove

답변

22

$('#<%=lblName.ClientID%>')id 특성을 가진 요소를 ASP.Net의 ClientID 속성에서 찾을 수 있습니다.

$("[id$=lblName]")id 속성이 lblName으로 끝나는 요소 (예 : foo-lblName)를 찾습니다.

+0

입니다. id는 그 이름으로 끝납니다. 그래서이 상황에서'$ ('# <% = lblName.ClientID %>')'는 컨트롤에 대한 유일한 선택자가 될 것이다. –

2

$('#<%=lblName.ClientID%>') - #은 id가있는 요소를 식별하기 위해 JQuery에서 사용하는 selector입니다.

$("[id$=lblName]") - lblName

1

먼저 온 ($('#<%=lblName.ClientID%>')) ID 셀렉터 Will select all the elements with id attribute which ends와, 그 ID에 의한 요소를 발견 할 것이다. 그것은 네이티브를 사용하므로 매우 빠릅니다. document.getElementById

두 번째 것은 Attribute Ends With selector입니다. 다른 방법으로 작동합니다. 예를 들어 IE에서는 제공된 값 (또는 비슷한 값)으로 끝나는 경우 각 요소의 모든 요소와 테스트 ID를 가져옵니다. 그것은 훨씬 느립니다. 최신 브라우저에서는 querySelectorAll이 해당 선택기로 요소를 찾는 데 사용되지만 해당 함수가 지원하는지 확실하지 않습니다 (음, here vailid css3처럼 정의되어 있으므로 최신 브라우저가 다음과 같이 끝나는 것으로 가정하십시오. querySelectorAll의 selector).

따라서 결론적으로 이전 버전의 브라우저에서는 id 선택기가 더 빨라야하며 어떤 경우이든 더 빠릅니다. 동시에 선택기로 끝내면 클라이언트 ID를 브라우저에 전달하지 않고 요소를 찾을 수 있습니다.

0

오늘 알게 된 내용을 추가하면 $('#<%=lblName.ClientID%>')은 하나의 요소 만 선택합니다. 그러나 $("[id$=lblName]")은 둘 이상의 요소를 선택할 것이므로 두 개 이상의 요소에 동일한 ID가 할당되어 있고 모든 요소를 ​​트래버스하려는 경우 그 때 첫번째 케이스는 제대로 작동하지 않을 것이다.