0

要素の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>

誰がこれが間違っているのかを見つけることができますか?

4

4 に答える 4

5

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

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

の問題.findは、兄弟ではなく、一致した要素の子を検索することです。ドキュメントから:

セレクター、jQueryオブジェクト、または要素によってフィルター処理された、一致した要素の現在のセット内の各要素の子孫を取得します。

と比較して.filter

一致した要素のセットを、セレクターに一致する要素に減らすか、関数のテストに合格します。

于 2011-10-03T14:27:59.720 に答える
2

findは、選択したノードの子のみを検索します。フィルタの機能を使用しようとしています。次のものが必要です。

        var $obj_clone = $filtered.filter($obj); // find original element again. Is something wrong here? 
于 2011-10-03T14:28:38.360 に答える
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.
于 2011-10-03T14:25:53.373 に答える
0

試す:

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

.find()は子のみを検索します

于 2011-10-03T14:29:40.077 に答える