2011-06-30 8 views
1

私はli要素のインデックスを取得したいと思います。 li要素は、ページが読み込まれた後に作成されます。 Jqueryは-1見つからないエラーを返します。Jqueryインデックスで要素が見つからない(-1)入力が間違っています(ライブ関数付き)

構造のHTMLが(いないページのソースに、DOMで見つかった):李さんが作られていますどのように

$("#warp-expand ul li a").live('click',function() { 

    var x = $("warp-expand ul li").index(this); 
    alert(x); //returns -1 

}); 

$("#playlister").click(function() { 
    $("#jp_playlist_2 ul li").each(function() 
    { 
    var s = $(this).text(); 
    $('#warp-expand ul').append('<li><div class="song"><div class="list_b"></div><a>' +s+ '</a></div></li>'); 
    }); 

}); 

<div id="warp-expand"> 
    <ul> 
    <li><div class="song"><div class="list_b"></div><a>test1</a></div></li> 
    <li><div class="song"><div class="list_b"></div><a>test2</a></div></li> 
    </ul> 
</div> 

jQueryの李インデックスを取得します

+1

あなたのインデックス機能のための '#ワープ-expand'を逃しています。 – scurker

+0

@Scurker:Plsは答えとして – Chandu

+0

を送ります。ちょうど '#'記号 – Marlin

答えて

2

は、あなたが行く:

$('#warp-expand a').live('click',function() {  
    var idx = $(this).closest('li').index();  
}); 

ライブデモ:だからhttp://jsfiddle.net/Aphrq/1/

を、あなたが見ることができるように、パラメータを指定せずにindex()を呼び出すと、うまく動作します。要素(この場合は対応するLI要素)を選択し、index()を呼び出します。また


は、ページの読み込みにあなたのDOM要素の参照をキャッシュ考える:

// cache reference on page-load (do this for all your references) 
var warp = $('#warp-expand'); 

// use delegate(), it's better! 
warp.delegate('a', 'click', function() { 
    var idx = $(this).closest('li').index();   
}); 

ライブデモ:http://jsfiddle.net/Aphrq/2/

+0

また、有益な回答です。効率性についてお聞かせいただきありがとうございます。 – Rob

関連する問題