2011-10-03 21 views
0

要素のindex()を見つけるだけの設定ですが、同じノード名の同じレベルの要素を参照する必要があります。jquery find同じノード名のindex()

返される数値は、期待どおりではありません。コードのコメントを参照してください。 filteredByNodeNameIndexを '2'にします。

・ホープ、この例のコードは、十分に明確である:

これは間違っているところ見つけることができ
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html> 
<head> 
    <title>TestDrive</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script> 
    <script type="text/javascript" > 
     function TestDrive() 
     { 
      var $obj = $("#div2"); 
      console.log("$obj.length:" + $obj.length); // returns: 1 

      var $filtered = $obj.parent().children($obj[0].nodeName); // find all divs in same parent 
      console.log("$filtered.length:" + $filtered.length); // returns: 3 

      var $obj_clone = $filtered.find($obj); // find original element again. Is something wrong here? 
      console.log("$objAgain.length:" + $obj_clone.length); // returns: 0 

      var filteredByNodeNameIndex = $obj_clone.index(); // i want the number 2 here 
      console.log("filteredByNodeNameIndex:" + filteredByNodeNameIndex); // returns: -1 
     } 
    </script> 
</head> 
<body onload="new TestDrive()"> 
    <div id="container"> 
     <!-- some random elements just for test --> 
     <a></a> 
     <div id='div1'></div> 
     <div id='div2'></div> 
     <span></span> 
     <span></span> 
     <a></a> 
     <div></div> 
     <a></a> 
    </div> 
</body> 
</html> 

+0

何をして動作していない探しは、次の必要がありますか?数字が間違っているのですか、コードが爆発していますか? –

+0

数字は期待通りではありません。コードのコメントを参照してください。 filteredByNodeNameIndexを '2'にします。 var filteredByNodeNameIndex = $ obj_clone.index(); //ここで番号2を欲しい –

答えて

5

.filter代わりの.findを使用してみてください:

var $obj_clone = $filtered.filter($obj); 

.findの問題は、それがマッチした要素の子ではなく、兄弟を探していることです。ドキュメントから:

はセレクタ、jQueryオブジェクト、または要素によってフィルタリングマッチ 要素の現在のセット内の各要素の子孫を取得します。 .filterと比較

セレクタまたは に一致するものにマッチした要素の集合を減らす機能のテストに合格。

+0

ありがとう、これは本当に役に立ちました。 –

1

3回目の試みでは、明らかに目的の値を返さない子自体を見つけようとしています。

イラスト:

var $filtered = $obj.parent().children($obj[0].nodeName); 
//Select set A 

var $obj_clone = $filtered.find($obj); 
//Search for set A among the CHILDREN of set A --> Fails, obviously? 

var filteredByNodeNameIndex = $obj_clone.index(); 
//Unexpected results. 
+0

これは本当ですが、それを修正する方法は説明していません。 'filter'に関する他の回答を見てください。 –

+1

質問は「解決する方法」ではなく「何が間違っているか」を説明することでした。 –

+0

ありがとう、これは本当に役に立ちました。 –

2

findは、選択したノードの子のみを検索します。 filterの機能を使用しようとしています。

 var $obj_clone = $filtered.filter($obj); // find original element again. Is something wrong here? 
0

試し:

var $obj_clone = $filtered.filter($obj); 

.find()のみ子供

関連する問題