我实际上是在创建一个向导,其中包含 Web 应用程序上的选项卡和活动选项卡之前的选项卡将以一种方式(绿色)表示完成,而它之后的选项卡则以另一种方式表示未完成(灰色)。
<div class="tabContainer">
<ul class='tabs'>
<li><a href='#tab1'><span class="badge">1</span></a></li>
<i class="icon-arrow-right"></i>
<li><a href='#tab2'><span class="badge">2</span></a></li>
<i class="icon-arrow-right"></i>
<li><a href='#tab3'><span class="badge">3</span></a></li>
<i class="icon-arrow-right"></i>
<li><a href='#tab4'><span class="badge">4</span></a></li>
<i class="icon-arrow-right"></i>
<li><a href='#tab5'><span class="badge">5</span></a></li>
</ul>
</div>
在我正在编写的自定义函数setTab()
中,我传递了我想要激活的选项卡,然后尝试修改所有其他选项卡以具有上面指示的样式。
function setTab(tabId) {
var $active, $content, $links = $('ul.tabs').find('a');
// Make tab active
$active = $($links.filter('[href="#tab'+tabId+'"]')[0] || $links[0]);
$active.addClass('active');
$active.find('span').addClass('badge btn-info');
$content = $($active.attr('href'));
// If Tab before, show as complete
var previousTabs = $active.prevAll('a');
previousTabs.removeClass('active');
previousTabs.find('span').removeClass('btn-info').addClass('badge btn-success');
// If Tab after, show as incomplete
var nextTabs = $active.nextAll('a');
nextTabs.removeClass('active');
nextTabs.find('span').removeClass('btn-info').removeClass('btn-success');
// Hide the remaining content
$links.not($active).each(function () {
$($(this).attr('href')).hide();
});
// Show Content
$content.show();
}
我正在寻找一种方法来检查元素是否在 jQuery中的prevAll()
or命令的结果中。nextAll()
我试图用它来解决它$.inArray
,$.each
但没有太多运气。我猜第一个不起作用,因为结果集是一个对象,而不是一个数组。第二个不起作用,因为我需要将它与$.each
函数内部不可用的元素进行比较。我敢肯定,经过足够的调整,我可以解决这个问题,但必须有更好的方法。
确定一个元素是否存在于另一个元素之前或之后的最佳方法是什么,如果它使用我一直在尝试的prevAll
andnextAll
方法,我该如何与该结果集进行布尔匹配?