我喜欢获取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>
Jquery获取li索引:
$("#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>');
});
});
开始:
$('#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/
$("#warp-expand ul li a ").live('click',function () {
var x = $(this).closest('li').index();
alert(x);
});
http://jsfiddle.net/5vGsE/