내 HTML이 다음과 같은 경우 :
<td class="controlCell">
<input class="inputText" id="SearchBag.CompanyName" name="SearchBag.CompanyName" type="text" value="" />
</td>
JQuery로 # SearchBag.CompanyName을 어떻게 선택할 수 있습니까? 나는 그것을 작동시킬 수 없으며 그것이 모든 것을 깨뜨리는 점이라고 두려워합니다. 성가신 것은 모든 ID의 이름을 바꾸는 것은 가독성의 손실은 말할 것도없고 많은 일이 될 것입니다.
참고 :
레이아웃을 위해 테이블을 만드는 방법에 대해 이야기하지 마십시오. CSS 의 가치와 단점을 잘 알고 있으며 최대한 많이 사용하려고 노력합니다.
답변
의견에 @Tomalak :
ID 선택기 앞에는 해시 #가 와야하기 때문에 여기에 모호성이 없어야합니다.
“# id.class”는 유효한 선택자이며 id와 별도의 클래스가 모두 일치해야합니다. 유효하고 항상 완전히 중복되는 것은 아닙니다.
리터럴 ‘.’을 선택하는 올바른 방법 CSS에서는 “#id \ .moreid”를 이스케이프 처리합니다. 이는 일부 구형 브라우저 (특히 IE5.x)에서 문제를 일으켰지 만 모든 최신 데스크탑 브라우저가이를 지원합니다.
동일한 방법이 jQuery 1.3.2에서 작동하는 것처럼 보이지만 철저히 테스트하지는 않았습니다. quickExpr은 그것을 선택하지 않지만 더 많은 선택기 파서는 그것을 올바르게 얻는 것처럼 보입니다.
$('#SearchBag\\.CompanyName');
답변
한 가지 변형은 다음과 같습니다.
$("input[id='SearchBag.CompanyName']")
답변
다음을 사용하면 아무것도 벗어날 필요가 없습니다 document.getElementById
.
$(document.getElementById('strange.id[]'))
getElementById
입력이 단지 id 속성이라고 가정하므로 점은 클래스 선택기로 해석되지 않습니다.
답변
짧은 답변 : id = "foo.bar"
인 요소가있는 경우 선택기를 사용할 수 있습니다$("#foo\\.bar")
더 긴 답변 : 이것은 jquery 문서의 일부입니다-섹션 선택기 :
http://api.jquery.com/category/selectors/
문서의 시작 부분에 귀하의 질문에 대한 답변이 있습니다.
메타 문자를 사용하려는 경우 (예 : ! "# $ % & '() * +,. / :;? @ [\] ^`{|} ~) 이름의 리터럴 부분으로 두 개의 백 슬래시 : \\. 예를 들어 id = "foo.bar"인 요소가있는 경우 선택기 $ ( "# foo \\. bar")를 사용할 수 있습니다. W3C CSS 사양에는 유효한 CSS 선택기에 관한 완전한 규칙 세트 또한 유용합니다 Mathias Bynens의 블로그 항목 식별자에 대한 CSS 문자 이스케이프 시퀀스
답변
ID가 변수에있을 때 attr 선택이 적절한 것으로 보입니다.
var id_you_want='foo.bar';
$('[id="' + id_you_want + '"]');
답변
이것은 jQuery 선택기 API에 설명되어 있습니다 .
메타 문자 (예
!"#$%&'()*+,./:;<=>?@[\]^`{|}~
:)를 이름의 리터럴 부분으로 사용하려면 두 개의 백 슬래시로 이스케이프해야합니다\\
. 예를 들어,가있는 요소
id="foo.bar"
는 선택기를 사용할 수 있습니다$("#foo\\.bar")
.
즉, 앞에 접두사를 붙 .
입니다 \\
.
$('#SearchBag\\.CompanyName')
문제는 .
클래스 $('#SearchBag.CompanyName')
와 일치 하므로 일치 <div id="SearchBag" class="CompanyName">
합니다. 탈출 한 사람 \\.
은 .
특별한 의미없이 정상적인 것으로 간주되며 원하는 ID와 일치합니다.
이것은 !"#$%&'()*+,./:;<=>?@[\]^`{|}~
그렇지 않으면 jQuery에서 선택기로 특별한 의미를 갖는 모든 문자에 적용됩니다 .
답변
더 일반적인 솔루션을 찾고있는 사람들은 특수 문자 앞에 하나의 백 슬래시를 삽입하는 하나의 솔루션을 찾았습니다. 이는 특수 문자가 포함 된 div에서 이름 및 ID를 검색하는 것과 관련된 문제를 해결합니다.
“Str1.str2 % str3”.replace (/ [^ \ w \ s] / gi, ‘\\ $ &’)
“Str1 \\. str2 \\ % str3″을 반환합니다.
이것이 유용하기를 바랍니다!
