[jquery] ID에 점이 포함 된 경우 jquery로 ID로 HTML 노드를 선택하는 방법은 무엇입니까?

내 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″을 반환합니다.

이것이 유용하기를 바랍니다!