2012-08-23 85 views
0

如果我有一个由多个jQuery的对象中的对象,那就是:如何获取jQuery对象内相对于该对象的元素的索引?

var $listItems $('ul.list1 li').add($('ul.list2 li')); 

我怎样才能得到任何元素的索引数组中,那就是:

$listItems.click(function() { 
    console.log($(this).index()); 
}); 

这不工作,因为当第二个列表中的项目被点击时,显然索引是相对于DOM的索引,而不是jquery对象。

我该如何获得索引?

http://jsfiddle.net/ZdCsu/

+0

你能提供的jsfiddle的样本? – davids

+0

当然,它的底部 – Jai

回答

1

相对索引总是有点jQuery中痛苦的,因为在你的堆栈中的元素可能不会有关于索引的逻辑关系。

你可以做这样的事情:

$('#list_one li').add('#list_two li').each(function(index) { 
    //assign a contrived index to each element in turn, relative to the stack 
    $(this).data('stack-index', index); 
}).on('click', function() { 
    //then retrieve it on click 
    alert($(this).data('stack-index')); 
}); 

此外,在具体的例子中,你邮政,没有必要为add(),但也许在你真正的代码存在。

+0

是的,我意识到,我发布后,它相对于我的情况,但我应该在一个选择器中完成所有。这似乎很缺乏jQuery的一面,我会认为这将是一个经常要求的功能。 – Jai

1

你可以做的是jQuery对象转换为数组什么:

var $listItems = $('ul.list1 li').add($('ul.list2 li')); 

$listItems.click(function() { 

    console.log($listItems.toArray().indexOf(this)); 

});​ 

你更新jsfiddle

+0

都是很好的解决方案,谢谢! – Jai

相关问题