2009-05-25 15 views
0
私は文書例えば

使用してjQueryのXPathのセレクタ

のすべてのノードのXPathの情報をキャッチするために、単純なDOMパーサ機能を使用してい

、HTMLは次のとおりです。

<div> 
    <div>Everyday People</div> 
    <div>My name is ACE</div> 
    <div>Hello world</div> 
</div> 

を保存するためにDOMの解析します配列arrでXPath情報:

<script type="text/javascript" src="js/jquery/js/jquery-1.3.2.min.js"></script> 
<script type="text/javascript" src="js/jquery/js/xpath-selector.js"></script> 

<script type="text/javascript"> 
function get_XPath(elt) 
{ 
    var path = ''; 
    for (; elt && elt.nodeType == 1; elt = elt.parentNode) 
    { 
    var idx = $(elt.parentNode).children(elt.tagName).index(elt) + 1; 
    idx > 1 ? (idx='[' + idx + ']') : (idx=''); 
    path = '/' + elt.tagName.toLowerCase() + idx + path; 
    } 
    return path; 
} 

var arr = Array(); 
htmlDoc = document; 
x = htmlDoc.documentElement.childNodes; 

for (i=0; i<x.length; i++) 
{ 
    arr.push(get_XPath(x[i])); 
} 
</script> 

後のスクリプトでIは、表示隠れたり続きを変更するようないくつかの機能を実行するためにarrに格納された値を使用しますノードの数。上記のスニペットで

<script> 
for(i=0;i<arr.length;i++) 
{ 
    //catch the object reference with the XPath info 
    $(arr[i]) 

} 
</script> 

、私は、オブジェクトを取得していますが、私のようなもののためにそれを使用するオブジェクト参照を取得できませんよ:任意の助けを大幅に歓迎されるであろう

$(arr[i]).text(); 

。誰でもjQuery XPathセレクタに取り組んでいますか?

答えて

2

要素を選択する以外の方法でXpathが必要なのかどうかはわかりません。あなたは、あなたはARR配列の要素その人自身を格納することができていない場合ので:

var arr = new Array(); 
htmlDoc = document; 
x = htmlDoc.documentElement.childNodes; 

for (i=0,b=x.length; i<b; i++){ 
    arr.push($(x[i])); 
} 

は、次に、あなたが行うことができます:

arr[i].text(); 
+0

私はこのソリューションを知っていますが、オブジェクトへの参照を格納するのがxpath informtaion ..よりもリソースを消費するのではないかと疑問に思っていました。文書が巨大ならば、オブジェクト参照を格納することはリソースに課税され、私は正しいですか?私はjavascriptのエキスパートではないので、あなたの意見を共有してください。 – Annibigi

+2

XPathのオブジェクトへの参照は、オブジェクト参照自体を格納するよりも*ウェイ*のリソースを消費します。オブジェクト参照は、標準的なXPath文字列と比較して小さいです。もう一度 - あなたは本当に何をしようとしていますか? – Tomalak

+0

(ここではメモリ消費量だけを指摘していますが、XPath文字列を再帰的に作成する処理時間でさえも、jQueryがそれらを再度解析する必要があります) – Tomalak

2

頭に浮かぶ最初の質問は... なぜあなたはこれをやっていますか?

要素にXPathを生成し、それを後で要素を参照できるように配列に格納しますか?なぜ要素自体を保存しないのですか?

最初に何をしようとしていますか?あなたの質問を見て、何も知りません、私はあなたよりも簡単なアプローチかもしれないと思う。

関連する問題