2010-04-18 3 views
0

페이지의 모든 요소가 자바 스크립트에서 만들어 지지만 DOM에서 경로의 해시 인 ID가 제공되는 아이디어는 미친 (하지만 너무 효과적 일 수 있습니다) 아이디어였습니다.Javascript 미친 아이디어 노드를 찾는

그래서 요소를 찾기 위해 DOM을 검색하는 대신 경로를 해시 한 다음 해당 해시로 getElementById()을 해시합니다.

문제는 처음에 DOM을 검색하는 것보다 경로가 더 비쌀 수 있다는 것입니다. 이것이 어떻게 행해질 수 있는지, 또는 그것이 어리석은 평범한가?

+1

요점은 id가 노드의 PATH라는 것입니다. 따라서 DOM을 검색하기보다는 경로가 있다면 이미 해시드 ID로 존재합니다. – Louis

+0

일반 old'childNodes [n]','parentNode' 등을 사용하는 것보다 경로를 다루는 것이 더 쉬운가요? – bobince

+0

처음에 요소를 찾는 데 문제가 있습니까? 요소를 찾으면 참조를 저장할 수 있습니다. 따라서 기본적으로 동적으로 캐시를 작성하는 대신 처음부터 모든 요소를 ​​검색합니다. – Kobi

답변

2

요소의 전체 경로를 알고 있다면 실제로이 경로를 통해이 종류의 것을 정당화 할 것입니까? 대개 절대 경로와 관련이없는 일반적인 측면으로 요소를 수집하는 일이 번거롭기 때문입니다. 그리고 Sizzle과 같은 엔진을 사용하면이 경우 사용 사례가 표시되는지 잘 모르겠습니다. :-)

또한 요소를 움직일 때 어떻게 처리해야하는지 궁금합니다. 아마도 자신의 해시를 다시 배정하십시오. 아마도 추악 해지기 시작합니다.

접근 방식이 이 아니며은 런타임시 Javascript로 작성된 요소로 작동합니다. 당신은 재귀 하강 기능을 충분히 쉽게 사후에 할당 할 수 있습니다 : 오히려 항상 내용을 다시 생성 할 필요없이 미리 생성 된 내용에 명중 한 시간

function createIDs(element) { 
    var child; 

    if (!element.id) { 
     element.id = createElementID(element); 
    } 
    for (child = element.firstChild; child; child = child.nextSibling) { 
     if (child.nodeType == 1) { // Element 
      createIDs(child); 
     } 
    } 
} 

// Kick things off 
createIDs(document.body); 

합니다. 그냥 지적하는 것.

0

나는 그 문제로 어떤 문제를 해결하려고하는지 궁금합니다.

고유 ID를 통해 요소를 가져 오는 경로를 해싱하는 것이 좋지만 어디에서 경로를 가져 옵니까? 이것들은 꽤 긴 "ids"이고 다소 다루기 힘들 것입니다. 또는 하드 코딩 된, 해시 된 ID를 사용하는 경우 자신의 코드를 크게 모호하게 만듭니다. 그리고 문서를 약간 재구성하면 모든 경로와 모든 ID가 변경됩니다. Javascript로 전체 사이트를 작성하는 것은 실제로 매우 미친 듯합니다. :)

전반적으로 번거롭지 않은 것처럼 들리는군요. 모든 현대 JS 프레임 워크에서 CSS 스타일 선택기를 사용하는 요소 조회는 일반적으로 병목 현상이 아니지만 개발하기가 훨씬 쉽습니다. 원시 JS를 쓰는 경우에는 다를 수 있지만, 어쨌든 그렇게하지 말아야한다고 주장 할 것입니다. 자포자기적인 행보가 없다면 말입니다. ; "페이지에있는 모든 요소가 자바 스크립트에서 생성되는 경우")

1

문제가있다. 이제는 이미 생성 된 페이지를 제공하는 대신 클라이언트의 PC에서 즉시 페이지를 생성합니다. 그들은 모든 페이지에 대해 그렇게해야 할 것입니다. 뭔가 해시 아이디어에 의한 조회의 긍정적 인 효과를 무효화 할 것이라고 나에게 알려줍니다.

+0

Touche,이 기능은 모든 것을 즉석에서 만들어야하는 응용 프로그램에서만 작동합니다. UI 프레임 워크 나 그와 비슷한 것. – Louis

1

jQuery와 같은 자바 스크립트 프레임 워크를 재발 명중인 것 같습니다.

DOM에 html 조각을 삽입하고 이러한 참조를 함수 포인터로 유지하거나 삽입 할 때 각 요소에 고유 한 ID를 할당하고 나중에 ID를 다시 쿼리 할 수 ​​있습니다 (매우 빠름).

1

나는이 두 큰 문제 참조 : 페이지가 클라이언트 측에서 동적으로 생성되기 때문에

  • 를 검색 엔진 로봇은 빈 페이지를 얻을 것이다.

  • DOM을 변경하는 페이지에 다른 스크립트가있는 경우 요소 경로가 변경되고 해싱이 더 이상 작동하지 않습니다.

관련 문제