2011-09-28 2 views
1

Relevant discussion.DOM 요소 참조에 대한 상수 시간 데이터 구조 만들기

요소/노드에 대한 참조 배열을 작성할 수 있음을 알고 있습니다. 또한 힙 (배열 인덱스 2n2n+1)을 사용하여 (잠재적으로 낭비적인) 이진 검색 트리를 만드는 데 사용할 수 있다는 단점을 알고 있습니다.

하지만 모든 것이 나에게는 조기 최적화 도구로는 충분하지 않습니다. 게다가 BST를 구현하는 것은 버그가 발생하기 쉽습니다.

여기 내 질문이 있습니다. 어떻게 든 javascript의 해시 (객체 또는 반대로)에 대한 인덱스로 요소 참조를 사용할 수 있습니까? 그렇지 않다면 요소 참조에서 고유 한 문자열을 만들어 내 해시 키로 사용할 수 있습니까? 그렇지 않다면 어떻게 jQuery가 그것을 하는가?

+0

달성하려는 목표는 무엇입니까? DOM 노드에서 자신의 데이터 구조로의 빠른 검색? 그렇다면 노드 오브젝트에 사용자 정의 특성을 항상 첨부 할 수 있습니다. –

+0

@AtesGoral, 당신이 옳은 것은 내가 성취하려는 것입니다. 나는 속성과 속성의 차이를 알지 못했습니다. 주어진 노드의 편집 속성은 해당 노드의 수명 동안 지속됩니다 (문서에있는대로)? –

+0

나는 100 % 확실하지는 않지만 특정 노드의 속성은 해당 노드의 수명 동안 지속됩니다. 특정 JS 객체가 기존 DOM 노드에 지정되도록하는 특정 브라우저에 특별한 경우가 있는지 모르겠다. –

답변

1

가장 쉬운 옵션은 바로 DOM 객체에 자신의 속성을 사용하는 것입니다

var element = document.getElementById("test"); 
element.myData = "whatever"; 

여기 jQuery의 .data() 기능을 사용하면 자신의 일반 자바 스크립트에서 사용할 수 있다는 것을 어떻게 작동하는지 뒤에 일반적인 생각이다. 개체에 대해 하나의 사용자 지정 특성을 사용하고 그 밖의 모든 항목을 해당 사용자 지정 특성의 값으로 인덱싱 된 데이터 구조에 저장합니다.

var idCntr = 0; // global cntr 

var data = {}; 
var element = document.getElementById("test"); 
var id = element.uniqueID; 
if (!id) { 
    id = idCntr++ + ""; 
    element.uniqueID = id; 
} 
data[id] = "whatever"; 


// then some time later, you can do this 
var element = document.getElementById("test"); 
console.log(data[element.uniqueID]); // whatever 

데이터 개체의 특정 개체에 대한 여러 특성을 저장하는 데는 좀 더 복잡하지만이 방법이 일반적입니다. 당신이 jQuery를 사용할 수 있는지

는 그리고, 그것은 사소한 :

$("#test").data("myData", "whatever"); // sets the data 

console.log($("#test").data("myData")); // retrieves the data 

정말 jQuery의 .data() 작품, 당신은 데이터를 설정하고 다음을 사용하는 경우를 검색하는 첫 번째 통화를 단계별로하는 방법을 보려면 unminified jQuery. 그것은 무엇을하는지 쉽게 알 수 있습니다.