HTML (또는 XHTML 만?)은 태그의 비표준 속성과 관련하여 상대적으로 엄격합니다. 사양의 일부가 아닌 경우 코드는 비준수 코드로 간주됩니다.
그러나 비표준 속성은 메타 데이터를 Javascript로 전달하는 데 상당히 유용 할 수 있습니다. 예를 들어 링크가 팝업을 표시한다고 가정하면 속성에 팝업 이름을 설정할 수 있습니다.
<a href="#null" class="popup" title="See the Popup!"
popup_title="Title for My Popup">click me</a>
또는 스팬과 같은 숨겨진 요소에 팝업 제목을 저장할 수 있습니다.
<style>
.popup .title { display: none; }
</style>
<a href="#null" title="See the Popup!" class="popup">
click me
<span class="title">Title for My Popup</span>
</a>
그러나 나는 어느 것이 선호되는 방법인지에 대해 찢어졌습니다. 첫 번째 방법은 더 간결하며 검색 엔진과 스크린 리더를 많이 사용하지 않는 것 같습니다. 반대로 두 번째 옵션을 사용하면 많은 양의 데이터를 더 쉽게 저장할 수 있으므로 더 다양하게 사용할 수 있습니다. 또한 표준을 준수합니다.
이 커뮤니티의 생각이 궁금합니다. 이런 상황을 어떻게 처리합니까? 첫 번째 방법의 단순성이 잠재적 인 단점을 능가합니까 (있을 경우)?
답변
저는 제안 된 HTML 5 솔루션 ( data-
접두사가 붙은 속성) 의 열렬한 팬입니다 . 편집 : 사용자 지정 속성 사용에 대한 더 나은 예가있을 수 있다고 덧붙입니다. 예를 들어, 표준 속성에 아날로그가없는 사용자 지정 응용 프로그램에서 사용할 데이터 (예 : className 또는 id로 표현할 수없는 항목을 기반으로 한 이벤트 처리기에 대한 사용자 지정).
답변
사용자 정의 속성은 클라이언트 측에 추가 데이터를 전달하는 편리한 방법을 제공합니다. Dojo Toolkit은이 작업을 정기적으로 수행하며 다음과 같이 지적되었습니다 ( Debunking Dojo Toolkit Myths ).
사용자 정의 속성은 항상 유효한 HTML이었으며 DTD에 대해 테스트 할 때 유효성을 검사하지 않습니다. […] HTML 사양은 인식되지 않은 속성은 사용자 에이전트의 HTML 렌더링 엔진에서 무시해야한다고 명시하고 있으며 Dojo는 선택적으로이를 활용하여 개발 용이성을 향상시킵니다.
답변
또 다른 옵션은 Javascript에서 다음과 같이 정의하는 것입니다.
<script type="text/javascript">
var link_titles = {link1: "Title 1", link2: "Title 2"};
</script>
그런 다음 링크에이 해시 테이블의 ID에 해당하는 ID가 있다고 가정하여 나중에 Javascript 코드에서 사용할 수 있습니다.
비표준 속성이나보기 흉한 숨겨진 스팬이라는 다른 두 가지 방법의 단점이 없습니다.
단점은 예제처럼 간단한 일에 약간의 과잉 일 수 있다는 것입니다. 그러나 전달할 데이터가 더 많은 더 복잡한 시나리오의 경우 좋은 선택입니다. 특히 데이터가 JSON으로 전달된다는 점을 고려하면 복잡한 객체를 쉽게 전달할 수 있습니다.
또한 데이터를 서식과 별도로 유지하므로 유지 관리에 도움이됩니다.
다음과 같은 것을 가질 수도 있습니다 (다른 방법으로는 실제로 할 수 없습니다).
var poi_types = {1: "City", 2: "Restaurant"};
var poi = {1: {lat: X, lng: Y, name: "Beijing", type: 1}, 2: {lat: A, lng: B, name: "Hatsune", type: 2}};
…
<a id="poi-2" href="/poi/2/">Hatsune</a>
그리고 아마도 서버 측 프로그래밍 언어를 사용하기 때문에이 해시 테이블은 동적으로 생성하기가 쉽지 않습니다 (JSON으로 직렬화하고 페이지의 헤더 섹션에 뱉어 냄).
답변
이 경우 최적의 솔루션은
<a href="#" alt="" title="Title of My Pop-up">click</a>
제목 속성을 사용합니다.
정말 필요한 경우 때때로 사양을 위반합니다. 그러나 드물게 좋은 이유가 있습니다.
편집 : 왜 -1인지 확실하지 않지만 때로는 사양을 깨뜨릴 필요가 있다고 생각하지만 그렇지 않을 때 지적했습니다.
답변
커스텀 DTD에서 popup_title 속성을 선언하지 않는 이유는 무엇입니까? 이것은 검증 문제를 해결합니다. 모든 비표준 요소, 속성 및 값에 대해이 작업을 수행하고이 유효성 검사가 내 코드에 대한 실제 문제 만 보여 주어 감사합니다. 이것은 또한 그러한 HTML에서 브라우저 오류를 덜 가능하게합니다.
답변
앵커 요소 안에 숨겨진 입력 요소를 중첩 할 수 있습니다.
<a id="anchor_id">
<input type="hidden" class="articleid" value="5">
Link text here
</a>
그런 다음 쉽게 데이터를 가져올 수 있습니다.
$('#anchor_id .articleid').val()
답변
결국 내 해결책은 일종의 구분 기호로 구분 된 id 태그에 추가 데이터를 숨기는 것이 었습니다 (하나의 밑줄은 공백이고 두 개는 해당 인수의 끝입니다). 두 번째 인수에는 ID가 있습니다.
<a href="#" class="article" id="Title_of_My_Pop-up__47">click</a>
추악하고 이미 다른 것을 위해 id 태그를 사용하고 있지 않다고 가정하지만 모든 브라우저에서 호환됩니다.