공백이있는 jquery ID


127

누구든지 ID가 공백이있을 때 jQuery를 사용하여 ID별로 DOM에서 항목을 선택하는 방법을 알고 있습니까?

예를 들어 내 상품의 ID는

<div id="content Module">Stuff</div>

jQuery로 어떻게 선택합니까?

내가 방금하면

$("#content Module").whatever() 

jQuery는 콘텐츠 ID와 모듈 ID를 모두 가진 항목을 찾으려고 시도합니다.

이 두 단어 ID가 광범위하게 사용되는 오래된 코드베이스로 작업 중이므로 모든 ID를 거치고 변경하는 것은 좋지 않습니다.


@ Glavić 모든 진술은 사실입니다. 그러나 새로 승인 된 답변은이 솔루션이 실제로 필요한 사람들에게 더 도움이 될 것입니다. 정말로 붙어있는 사람들에게는 공간을 다루는 방법을 아는 것이 정말로 필요합니다.
Jeff Davis

네, 사실입니다,하지만 내 대답은 또한 ID의 공백에 대한 솔루션을, 그것도 밖으로 굵게)
Glavić

1
ID 대신 ID를 올바르게 작성하도록 공감하십시오. 미안, 애완 동물 친구 그리고 네, 저는 대부분의 사람들이 약어 및 단축 단어를 복수형에 아포스트로피를 사용할 알고 있지만, 나에게 그것은 여전히 식료품의 아포스트로피처럼 보이는 walkinthewords.blogspot.com/2009/05/grocers-apostrophe.html
후안 멘데스

답변:


253

속성 선택기를 사용하십시오.

$("[id='content Module']").whatever();

또는 태그를 지정하는 것이 좋습니다.

$("div[id='content Module']").whatever();

$ ( '# id')와 달리 페이지 내에 동일한 ID를 가진 여러 요소가있는 경우 여러 요소를 반환합니다.


1
Glavic의 답변조차도 최고의 제안입니다. 이 답변이 문제를 해결했다고 생각합니다 :)
GusDeCooL

8
이것은 많은 도움이되었습니다. 나는 ajax를 통해 끔찍한 HTML을 읽고 있으며 HTML의 구조 또는 ID 형식을 제어 할 수 없습니다. ID에는 공백이 있으므로 Elliot의 답변은 엄청나게 도움이되지만 glavic의 도움은 전혀 도움이되지 않습니다.
daybreaker

고마워, 좋은 대답!
alcfeoh

62

공백을 사용하지 마십시오. 이유는 간단합니다. 공백 문자는 ID 속성에 유효하지 않습니다.

ID 토큰은 문자 ([A-Za-z])로 시작해야하며 뒤에 여러 문자, 숫자 ([0-9]), 하이픈 ( "-"), 밑줄 ( "_"), 콜론이 올 수 있습니다. ( ":") 및 마침표 ( ".")

그러나 표준에 관심이 없다면 $("[id='content Module']")

비슷한 스레드> HTML의 id 속성에 유효한 값은 무엇입니까?

편집 : HTML 4.01과 HTML5의 ID가 어떻게 다른지

HTML5는 id 속성에 대한 추가 제한을 제거합니다. 문서에서 고유 한 것을 제외하고 남아있는 유일한 요구 사항은 값에 하나 이상의 문자 (비어있을 수 없음)를 포함해야하며 공백 문자를 포함 할 수 없다는 것입니다.

링크 : http://mathiasbynens.be/notes/html5-id-class


4
+1. 명명 표준을 준수하면이를 따르지 않을 때 해결 방법을 따를 필요가 없습니다.
matt b

이것은 유효한 ID를 갖도록 두 번째 단어를 잘라내는 아이디어를 촉발했습니다. 문제를 해결했습니다. 감사합니다!
Jeff Davis

1
여기에 HTML 4.01 사양을 인용하고 있습니다. 그것은 여전히 ID 속성 값을 사용 공간 문자를 허용하지 않는다 있지만, HTML5는 이러한 제한의 대부분을 제거 않습니다 mathiasbynens.be/notes/html5-id-class
마티아스 Bynens

2
"표준"으로 인해 기존 프로젝트의 전체 코드베이스를 해킹하라고 해킹하지 마십시오. 대부분, 이것은 주석, 확실히 허용 대답 :( 속도한다
Coderer

이상한. 공간은 대부분의 목적에 적합합니다. 왜 표준이 아닌가?
Lodewijk

23

누군가 궁금한 점이 있다면, 탈출하는 것이 효과가 있다는 것을 알았습니다. 이는 대상 DOM을 제어 할 수없는 경우 (예 : 사용자 스크립트 내에서) 특히 유용합니다.

$("#this\\ has\\ spaces");

이중 백 슬래시가 필요합니다.


JavaScript 자체가 다른 언어의 문자열 상수 인 경우 최대 4 개의 백 슬래시.
Brilliand

2
다른 언어 자체가 다른 언어의 문자열 상수 인 경우 최대 8 개의 백 슬래시 :)
daniel1426

1
문자열이 재귀 적으로 이스케이프 될 때 스택 오버플로가 발생합니다
Jeff Davis

7

Chris가 제안한 방법은 jQuery 함수와 함께 작동하도록 조정될 수 있습니다.

var element = document.getElementById('content Module');
$(element) ... ;

1
아아! 더 아래로 스크롤해야합니다!
gotomanners

2

시도 할 아이디어 :

$("#content" + &amp;#032; + "Module").whatever()

$("#content" + %20 + "Module").whatever()

세미콜론으로 인해 자바 스크립트 오류가 발생할 수 있습니다. 공백이 없도록 ID를 변경하는 것이 좋습니다.

또한 시도하십시오 document.getElementByID("content Module")


1
document.getElementByID는 일반 객체를 제공하므로 찾고있는 jQuery 함수를 수행 할 수 없습니다. 그러나 비슷한 상황에서는 좋은 해결 방법이 될 것입니다.
Jeff Davis

1
$(document.getElementByID("content Module"))jquery 객체를 제공 하지 않습니까?
gotomanners

1

이것은 나를 위해 일했습니다.

document.getElementById(escape('content Module'));

0

HTML에서 ID 속성 값에 공백이있는 것은 기술적으로 유효하지 않지만 실제로 jQuery를 사용하여 선택할 수 있습니다.

http://mothereffingcssescapes.com/#content%20module 참조 하십시오 :

<script>
  // document.getElementById or similar
  document.getElementById('content module');
  // document.querySelector or similar
  $('#content\\ module');
</script>

jQuery는 Selectors API와 유사한 구문을 사용하므로을 사용 $('#content\\ module');하여 요소를 선택할 수 있습니다 id="content module".

CSS에서 요소를 대상으로하려면 다음과 같이 이스케이프 할 수 있습니다.

<style>
  #content\ module {
    background: hotpink;
  }
</style>

0

요소가 id에 대한 정확한 값을 가지길 원한다면 작동 할 수 있습니다

$("[id='content Module']").whatever();

그러나 요소에 다른 ID가 있거나없는 class 중 하나만 가지고 있는지 확인하려면

$("[id~='content']").whatever();

이 경우이 요소를 선택합니다 id="content"하거나 id="content Module"또는id="content Module other_ids"


0

필자의 경우 공백이 % 20으로 바뀌기 때문에 이스케이프가 작동하지 않는다는 것을 알았습니다. 대신 페이지의 h1을 목록 항목의 텍스트로 바꾸는 대신 replace를 사용했습니다. 메뉴에 다음이 포함 된 경우 :

<li id="Contact Us"\>Contact Us</li>

function setTitle(menu) {
    $("h1").text( $("li#" + menu.replace(" ", "\\ ")).text() );
}

0

jQuery에 쉼표 및 / 또는 공백이 포함 된 요소 ID에 문제가 있었 으므로이 작업을 수행했으며 매력처럼 작동했습니다.

var ele = $(document.getElementById('last, first'));

공백이 있고 작동하지 않습니다.

var ele = $('#last, first');

쉼표가 있으며 작동하지 않습니다.

var ele = $('#last,first');


0

선택기에서 기타 문자를 이스케이프 처리합니다 (공백 포함) .

var escapeSelector = function(string) {
  string = string||"";
  if (typeof string !== 'string') return false;
    return string.replace( /(:|\.|\[|\]|,|=|@|\s|\(|\))/g, "\\$1" );

}
console.log($("div[data-id="+escapeSelector("Document (0).json")+"]").text());   
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div data-id="Document (0).json">Howdy</div>

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.