2012-03-09 3 views
3

ID가 포함 된 여러 HTML 템플릿이 포함 된 웹 페이지를 만듭니다. 결과적으로 마지막 페이지에는 HTML에서 허용하지 않는 동일한 ID를 가진 여러 HTML 요소가 포함될 수 있습니다.동일한 HTML 문서에 여러 개의 동일한 ID가 있습니다.

여전히 jQuery 컨텍스트를 사용하여이 문제를 해결할 수있는 것 같습니다. $ ("# id54", template4),이 방법은 항상 모든 브라우저에서 작동합니까, 아니면 일부 브라우저에서 다중 ID를 거부하겠습니까?

+15

DOM에 동일한 ID가 없어야합니다. – PeeHaa

+0

추 신 : id를 선택할 때 컨텍스트를 추가 할 필요가 없습니다. ID에서만 선택하는 것은 정말 빠릅니다. – PeeHaa

+0

그래서 당신이 말하는 것은 jQuery가 여러 개의 동일한 ID를 선택할 때 더 많은 요소를 반환한다는 것입니다. 그것은 shouldnt하고, 그것의 고려 된 아주 나쁜 연습. 여러 클래스를 사용하십시오. –

답변

10

$(selector, context) 구문은 항상 주어진 컨텍스트 내에서만 검색하므로 ID가 해당 컨텍스트 내에서 고유 한 경우 jQuery가 모든 브라우저에서 작동해야합니다.

그러나 알고 있듯이 템플릿에서 이러한 방식으로 ID를 사용하는 것은 좋지 않습니다.

여러 개의 동일한 ID가 허용되지 않으므로 처리 방법에 대한 지정이 없습니다. 모든 브라우저가 작성중인 코드를 계속해서 지원한다는 보장은 결코 없습니다. 이 코드는 오늘날의 모든 주요 브라우저에서 예상대로 작동합니다.

해결 방법은 고유 한 ID를 보장하기 위해 템플릿 엔진에서 클래스 또는 로직을 사용하는 것입니다. templateID-control-2-myButton.

+0

OK - 클래스를 사용하는 것이 좋습니다. –

4

jQuery 컨텍스트를 사용하는 한. $('#some-id', context), 제대로 작동합니다.

하지만 실제로 페이지에서 두 번 이상 나타나는 요소에는 ID 대신 클래스 이름을 사용해야합니다.

+0

왜 downvote? –

+0

왜이 downvoted되었다? 나는 동의 .. –

1

브라우저가 없으면 여러 ID를 거부하지만 나쁜 습관입니다. "ID"태그는 DOM (Document Object Model) 내의 개체에 대한 고유 식별자입니다. 이러한 ID를 사용하여 jQuery를 사용하려는 경우 다른 솔루션을 찾아야합니다. 참고 : 코드는 여전히 완벽하게 작동하며 모든 브라우저에서 렌더링됩니다. 항상 쿼리하는 경우 DOM에 더 많은 스트레스를 가하고 모두 동일한 ID를가집니다! 동일한 ID를 가지고 각 템플릿이 필요한 경우 (플러스, 아주 유지 보수되지 않음)

는, 클래스 (즉 .template를) 또는 사용자 정의 속성을 사용하는 것이 좋습니다 (예 : <div class="something" mycustomid="1">는 $ (. 뭔가) .attr ('mycustomid를 사용 ')를 사용하여 액세스 할 수 있습니다 (참고 : W3C HTML Validator는 유효성을 검사하지 않습니다)

실제로 ID를 사용하고 싶지만 코드를 개선하고 싶다면 id 앞에 고유 한 접두어를 붙이십시오. 그런 식으로 템플릿을 만드는 경우 반복자의 인덱스), 정규 표현식을 사용하여 jQuery를 사용하십시오.

많은 답변이 아니지만 정보가 충분하지 않습니다.

관련 문제