2011-06-30 19 views
1

我喜欢得到li元素的索引。 li元素是在页面加载后创建的。 Jquery返回-1找不到错误。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来得到李指数:

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

}); 
+1

你错过了'#经expand'为索引功能。 – scurker

+0

@Scurker:请发表您的问题作为回答 – 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