2011-09-16 2 views
4

저는 querySelector에 전달하기에 적합한 CSS 선택기로서 요소에 대한 상대적 참조를 저장하고있는 응용 프로그램을 작성하고 있습니다. "base"요소에 대한 상대 참조를 저장하려면 동일한 요소를 반환하는 선택기가 필요합니다.element.querySelector의 신원 선택기?

Level 1 Selectors API에 정의 된 ElementquerySelector 방법에 대한 ID 선택기는 다음을 만족합니까?

var identitySelector = "<this is the selector I want to know>" 

for (int i = 0; i < document.all.length; i++) { 
    var elem = document.all[i]; 
    if (elem !== elem.querySelector(identitySelector)) { 
     throw identitySelector + " is not the identity selector"; 
    } 
} 

업데이트 :

이 셀렉터를 사용할 수없는 것처럼, 나는 선택이 의사와 같은 경우 상황에 맞는 요소를 반환하는 기능을 querySelector 내 호출을 래핑하는거야

-class :root.

var identitySelector = ":root" 

var querySelectorProxy = function(elem, selector) { 
    return selector === ':root' ? elem: elem.querySelector(identitySelector); 
} 

for (int i = 0; i < document.all.length; i++) { 
    var elem = document.all[i]; 
    if (elem !== querySelectorProxy(elem, selector)) { 
     throw identitySelector + " is not the identity selector"; 
    } 
} 

답변

3

하나도 존재하지 않습니다.


는 존 레식은 자신의 블로그 주제 Thoughts on querySelectorAlllink to a discussion을 제공했다.

그의 쇠고기는 모든 요소 노드에서 검색 할 수 있지만 통과 한 선택자는 전체 문서를 고려합니다. (개인적으로 이것이 올바른 접근이라고 생각합니다.)이 때문에 그는 자신이 설명하는 것처럼 신원 선택기가 있기를 바랬습니다.

jQuery (Sizzle)는 요소의 ID를 사용하거나 (사용할 수없는 경우 임시 요소를 할당하고) 해당 ID 선택기를 앞에 놓기 위해 선택기를 재구성하여 약간의 해킹을 사용합니다. 이 같은

뭔가 :

var identitySelector = "<this is the selector I want to know>" 

for (int i = 0; i < document.all.length; i++) { 
    var elem = document.all[i], 
     needs_id = false; 
    if(!elem.id) { 
     needs_id = true; 
     elem.id = '___some___obscure___value___'; 
    } 
    if (elem !== elem.querySelector('#' + elem.id)) { 
     throw identitySelector + " is not the identity selector"; 
    } 
    if(needs_id) { 
     elem.id = null; 
    } 
} 

...이 여기에 달성 될지 모른다하지만.

+0

빠른 답변 감사드립니다. 해결 방안으로 제안 된 ": root"의사 요소 선택기로 변환 된 null 또는 missing selector를 유지하고 querySelector에 대한 호출을 래핑하여 해당 입력을 처리합니다. – ironchefpython

+0

@ironchefpython : 천만에요. 좋은 계획 같아. – user113716