2011-09-16 5 views
4

私はquerySelectorに渡すのに適したCSSセレクタとして、要素への相対参照を格納するアプリケーションを作成しています。 "base"要素への相対参照を格納する場合、同じ要素を返すセレクタが必要です。element.querySelectorのIDセレクタ?

Level 1 Selectors APIに定義されているのquerySelectorメソッドの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

ありません。


ジョンResig氏は、彼のブログのトピック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

クイックアンサーに感謝します。私のアプリケーションの回避策として、nullまたは欠落セレクタを提案された ":root"擬似要素セレクタに変換し、querySelectorへの呼び出しをラップしてその入力を処理します。 – ironchefpython

+0

@ironchefpython:ようこそ。良い計画のように聞こえる。 – user113716

関連する問題