자바 스크립트가 제공하는 상호 작용이있는 페이지를 만들고 있습니다. 예를 들어 AJAX 요청을 보내 기사의 내용을 가져온 다음 해당 데이터를 div에 표시하는 링크입니다. 분명히이 예에서, 기사의 ID 인 여분의 정보를 저장하려면 각 링크가 필요합니다. 내가 처리 한 방식은 href 링크에 해당 정보를 넣는 것입니다.
<a class="article" href="#5">
그런 다음 jQuery를 사용하여 a.article 요소를 찾고 적절한 이벤트 핸들러를 연결합니다. (여기서 유용성이나 의미에 매달리지 마십시오. 단지 예일뿐입니다)
어쨌든,이 방법은 효과가 있지만 약간 냄새가 나고 전혀 확장 할 수 없습니다 (클릭 기능에 둘 이상의 매개 변수가있는 경우 어떻게됩니까? 그러한 매개 변수 중 일부가 선택적인 경우 어떻게됩니까?)
즉각적인 대답은 요소에 속성을 사용하는 것이 었습니다. 내 말은, 그것이 그들이 원하는 것입니까? (거의).
<a articleid="5" href="link/for/non-js-users.html">
에서 내 최근 질문 이 방법이 유효하면 내가 물었고, 그 다음에 아니, 유효하거나 신뢰성이 아니다, (나는 안) 내 자신의 DTD를 정의하지의 짧은 밝혀졌습니다. 일반적인 반응은 데이터를 class
속성 에 넣는 것이 었지만 (내 잘못 선택한 예일 수도 있지만) 나에게는 더 냄새가납니다. 예, 기술적으로 유효하지만 훌륭한 솔루션은 아닙니다.
내가 과거에 사용했던 또 다른 방법은 실제로 일부 JS를 생성하고 <script>
태그 의 페이지에 삽입 하여 객체와 연결할 구조체를 만드는 것입니다.
var myData = {
link0 : {
articleId : 5,
target : '#showMessage'
// etc...
},
link1 : {
articleId : 13
}
};
<a href="..." id="link0">
그러나 이것은 유지하기 위해 엉덩이에 진짜 고통이 될 수 있으며 일반적으로 매우 지저분합니다.
따라서 질문에 도달하기 위해 HTML 태그에 대한 임의의 정보 조각을 어떻게 저장 합니까?
답변
어떤 버전의 HTML을 사용하고 있습니까?
HTML 5, 가지고 완전히 유효 데이터 -로 시작 속성 정의를 , 예를 들어,
<div data-internalid="1337"></div>
XHTML에서 이것은 실제로 유효하지 않습니다. XHTML 1.1 모드 인 경우 브라우저에서 이에 대해 불평하지만 1.0 모드에서는 대부분의 브라우저가 자동으로 무시합니다.
내가 당신이라면, 스크립트 기반 접근법을 따르겠습니다. 서버 측에서 자동으로 생성하여 유지 관리에 어려움을 겪지 않도록 할 수 있습니다.
답변
jQuery를 이미 사용하고 있다면 jQuery를 사용하여 dom 요소에 임의의 데이터를 저장하는 데 권장되는 방법 인 “data”방법을 사용해야합니다.
무언가를 저장하려면 :
$('#myElId').data('nameYourData', { foo: 'bar' });
데이터를 검색하려면
var myData = $('#myElId').data('nameYourData');
그게 전부입니다.하지만 자세한 정보 / 예제 는 jQuery 설명서 를 참조하십시오.
답변
또 다른 방법으로, 나는 개인적으로 이것을 사용하지 않지만 작동합니다 (eval ()이 위험하기 때문에 JSON이 유효한지 확인하십시오).
<a class="article" href="link/for/non-js-users.html">
<span style="display: none;">{"id": 1, "title":"Something"}</span>
Text of Link
</a>
// javascript
var article = document.getElementsByClassName("article")[0];
var data = eval(article.childNodes[0].innerHTML);
답변
임의의 속성은 유효하지 않지만 최신 브라우저에서는 완벽하게 신뢰할 수 있습니다. 자바 스크립트를 통해 속성을 설정하는 경우 유효성 검사에 대해 걱정할 필요가 없습니다.
대안은 자바 스크립트에서 속성을 설정하는 것입니다. jQuery에는 그 목적을위한 유용한 유틸리티 메소드가 있거나 직접 롤백 할 수 있습니다.
답변
가능한 모든 브라우저에서 작동하는 해킹은 다음과 같이 공개 클래스를 사용하는 것입니다. <a class='data\_articleid\_5' href="link/for/non-js-users.html>;
이것은 순수 주의자들에게 그다지 우아하지는 않지만 보편적으로 지원되고 표준을 준수하며 조작하기가 매우 쉽습니다. 실제로 가장 좋은 방법처럼 보입니다. 이 경우 serialize
, 수정 , 복사 태그를, 또는 다른 거의 아무것도 할,data
것이다 유지 부착 복사 등
유일한 문제는 직렬화 할 수없는 객체를 그런 식으로 저장할 수 없으며 실제로 거대한 것을 넣으면 한계가있을 수 있다는 것입니다.
두 번째 방법은 다음과 같은 가짜 속성 을 사용하는 것입니다.<a articleid='5' href="link/for/non-js-users.html">
이것은 더 우아하지만 표준을 위반하며 지원에 대해 100 % 확신하지 못합니다. 많은 브라우저가 완전히 지원 JS
하지만 IE6는 액세스를 지원 하지만 CSS
selectors
(여기서는 중요하지 않음) 액세스를 지원한다고 생각합니다 . 아마도 일부 브라우저가 완전히 혼란 스러울 수 있으므로 확인해야합니다.
직렬화 및 역 직렬화와 같은 재미있는 작업을 수행하는 것이 훨씬 더 위험합니다.
태그를 복사하려고 할 때를 제외하고는 ids
순수 JS
해시를 사용하는 것이 대부분 작동합니다. 이있는 경우 tag
<a href="..." id="link0">
표준 JS
방법을 통해 복사 한 다음 data
하나의 사본에 첨부 된 파일을 수정하려고 하면 다른 사본이 수정됩니다.
를 복사하지 않거나 읽기 전용 데이터를 tag
사용 하는 경우 문제가되지 않습니다 . 를 복사 하고 수정 한 경우 수동으로 처리해야합니다.tag
답변
jquery를 사용하여
저장 : $('#element_id').data('extra_tag', 'extra_info');
검색 : $('#element_id').data('extra_tag');
답변
현재 jQuery를 사용하고 있지만 onclick 핸들러를 인라인으로 정의하면 어떻게됩니까? 그럼 당신은 할 수 있습니다 :
<a href='/link/for/non-js-users.htm' onclick='loadContent(5);return false;'>
Article 5</a>