2011-10-03 69 views
0

我有這個設置,只是爲了找到一個元素的index(),但它應該用相同的nodename來查看同一級別的元素。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

在第三次嘗試時,您試圖找到孩子本身,顯然不會返回所需的值。

畫報:

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()只查找兒童

相關問題