我需要在与给定选择器匹配的其他元素中找到一个元素的索引。我不能简单地使用 .index() 没有参数我需要忽略几个“外来”元素。
$('body').delegate('.TabHeader', 'click', function() {
var $this = $(this),
// All tab headers.
$headers = $this.parent().children('.TabHeader'),
// All tab contents.
$contents = $this.parent().siblings('.TabContent'),
// New active tab position.
// PROBLEM HERE, i would like to do that, but jQuery doesn't handle it:
index = $this.index( $headers ),
// New active tab header.
$newActiveHeader = $headers.eq( index ),
// New active tab content.
$newActiveContent = $contents.eq( index );
// Hidding all other tabs.
$headers.not( $newActiveHeader ).removeClass('Active');
$contents.not( $newActiveContent ).removeClass('Active').addClass('Hidden');
// Showing new active tab.
$newActiveHeader.addClass('Active');
$newActiveContent.addClass('Active').removeClass('Hidden');
});
使用这种 HTML 代码:
<div>
<ul>
<li class="TabHeader Active">Tab 0</li>
<li class="TabHeader">Tab 1</li>
<li class="TabHeader">Tab 2</li>
<!-- There can be foreign elements mixed with <li> elements -->
</ul>
<div class="TabContent Active">
Content 0
</div>
<div class="TabContent Hidden">
Content 1
</div>
<div class="TabContent Hidden">
Content 2
</div>
<!-- There can be foreign elements mixed with <div> elements -->
</div>
(标签是动态生成的,所以我使用 .delegate() 如果重要的话)
有没有一种明确的方法可以在一组匹配的元素中获取元素的索引,而不仅仅是在 parent 的子元素中?