0

URL のハッシュを取得し、それをリスト内の href のリストと比較しようとしています。以下は私のコードの関連部分です

                //ON PAGE LOAD
                var hash = document.URL.substr(document.URL.indexOf('#')+1);
            hash = '#' + hash;
            if(hash)
            {
                $( "#tab ul li a" ).each(function( index ) {
                  if(hash==$(this).attr('href'))
                  {
                    alert(index);
                    return index;
                  }
                });
            }
            alert(index);
            //DO STUFF WITH INDEX

問題は、ネストされた関数がインデックス値を返さないことです (間違いなく設定されています)。最初のアラートは数値を返しますが、2 番目のアラートは未定義を返します。

一致した値のインデックスを返すにはどうすればよいですか?

4

2 に答える 2

2

途中で返品することはできませんeachfalseせいぜいループを破るために戻ることができます。プレースホルダー変数を使用して必要な値を格納し、ループを中断します。

            var returnValue;
            $( "#tab ul li a" ).each(function( index ) {
              if(hash==$(this).attr('href'))
              {
                alert(index);
                returnValue = index;
                return false; // breaks the each
              }
            });

あなたがそうするとき、あなたは...each(function(...の中で呼び出される関数を作成していますeach。したがって、その中で何かを返すと、戻り値はeachコード内のどこかで読み取られ、実行を続けて何か他のものを返します (通常、チェーン可能性を可能にする別の jQuery オブジェクト)。実際には、each必要に応じて何かを返すことを期待しています。これは、たとえばfalse、ノードのリストの反復処理を停止するためです。

于 2013-04-17T19:10:05.073 に答える
1

ループの前に定義された変数に格納してから、ループfalseを停止するために戻る必要があります。(eachの戻り値は、ループを早期に停止するかどうかを決定するためにのみ使用されます)

例:

var returned;
$( "#tab ul li a" ).each(function( index ) {
    if(hash==$(this).attr('href')) {
        returned = index;
        return false;
    }
});
// returned contains the value, or undefined
于 2013-04-17T19:08:15.810 に答える