Jquery索引找不到元素(-1)错误输入(带有live函数)

时间:2011-06-30 20:40:47

标签: jquery indexing live

我想获得li元素的索引。 li元素在页面加载后创建。 Jquery返回-1未找到错误。

结构html(在dom中找到,而不是在页面源中):

<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>

获取li索引的Jquery:

 $("#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>');
    });

});

2 个答案:

答案 0 :(得分:3)

你走了:

$('#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/

答案 1 :(得分:0)

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

    var x = $(this).closest('li').index();
    alert(x); 

 });

http://jsfiddle.net/5vGsE/