2010-06-22 4 views
0

jQuery.data 메소드와 같은 데이터를 dom 노드에 연결하는 스크립트를 만들었습니다. 기본적으로 스크립트는 모든 노드의 데이터가 포함됩니다 물체의 핵심 노드의 속성을 설정하지만 텍스트 노드의 속성을 설정 IE 7에서 오류가 발생합니다 :자바 스크립트로 IE의 텍스트 노드에 데이터 설정

var a=document.createElement("div"); 
a.test="test"; 
alert(a.test); //Works and shows "test" 

var a=document.createTextNode("text"); 
a.test="test"; //Throws an error 

그래서 당신을을 이 버그에 대한 해결 방법을 알고 계십니까? 아니면 거기에 데이터를 설정할 수있는 텍스트 노드에서 거의 쓸모없는 속성이 있습니까?

답변

2

최상의 계획 :하지 마십시오.

일반적으로 속성을 호스트 개체 (즉, 기본 JavaScript 개체가 아닌 브라우저에서 제공되는 개체)에 할당하는 것은 좋지 않습니다. 호스트 개체는 이러한 종류의 확장 (예 : "expandos")을 허용 할 의무가 없으며 많은 경우 (예 : IE의 ActiveX 개체)에는 허용되지 않습니다. 또한 IE에서는 document.expando = false;을 사용하여 문서 내의 모든 DOM 노드에서 펼치기를 방지 할 수 있습니다.

한 가지 대안은 텍스트 노드에 대한 데이터를 저장하는 데 jshashtable을 사용하는 것입니다. 이것은 해시 테이블 구현으로 문자열 (문자열이 아닌)을 키로 사용할 수 있습니다.

+0

그래, 나는 당신과 동의하지만 데이터를 요소에 연결하는 유일한 (안전한) 방법입니다. 그래서 텍스트 노드에서 그렇게 할 수있는 방법이 없습니다. – mck89

+0

제안 된 대안을 추가했습니다. –

+0

예 jshashtable 이제 어떻게 작동하는지 이해해야합니다. 감사!!! – mck89

0

나는 이것이 createTextNode이 요소와 반대로 텍스트를 만들기 때문이라고 생각합니다. 따라서 속성을 속성에 할당 할 수 없습니다.

텍스트를 표시하려면 createElement("p") (또는 모든 요소 유형)을 시도해보십시오.

편집 : 이것은 잘못되었습니다. 솔루션에 대한 Tim Down의 답변을 참조하십시오.

+0

아니요. 'document.createTextNode'는 이름으로 강하게 암시되는 텍스트 노드를 만듭니다. –

+0

createTextNode는 단순히 텍스트가 아닌 텍스트 노드를 생성하고 내 질문은 텍스트를 표시하는 것이 아닙니다. 속성을 할당하는 방법을 찾고 있습니다 – mck89

+0

Whoopsie. 미안합니다. – huntaub

관련 문제