我有以下标签功能:
//Tabs ///
$('.tabs').each(function() {
var $tabs = $(this);
$tabs.find('.section-body > div:not(:first-child)').hide().end()
.find('.section-head a:eq(0)').addClass('active').end()
.find('.section-head a').on('click', function() {
$tabs.find('.section-head a').removeClass('active').end()
.find('.section-body > div:eq(' + $(this).index() + ')').show().siblings().hide();
$(this).addClass('active');
});
});
它起作用,但是$(this).index()
与另一个插件冲突,而另一个插件在$(this).index()
存在时停止工作。是否有不同的方法来实现相同的选项卡结果而不使用$(this).index()?
如果需要,这是HTML:
<div class="section tabs">
<div class="section-head">
<a>Section A</a>
<a>Section B</a>
</div>
<div class="section-body">
<div>
<p>Section A</p>
</div>
<div>
<p>Section B</p>
</div>
</div>
</div>
这是一个JS小提琴:http://jsfiddle.net/qEgg5/1/
答案 0 :(得分:2)
你有两个解决方案
在加入插件之前,请执行以下操作:
$.fn.myIndex = $.fn.index;
上面做的是,它创建了一个新的插件myIndex
,它传递了index
的函数引用。
现在,您可以使用$(this).myIndex()
提供与$(this).index()
相同的效果,但不会产生歧义。
答案 1 :(得分:1)
您可以(并且应该)使用传递给.each()
:
.each(function)
function Type: Function( Integer index, Element element ) A function to execute for each matched element
因此它会变成:
$('.tabs').each(function(idx, elt) {
var $tabs = $(elt);// $(elt) is equivalent to $(this)
$tabs.find('.section-body > div:not(:first-child)').hide().end().find('.section-head a:eq(0)').addClass('active').end().find('.section-head a').on('click', function() {
$tabs.find('.section-head a').removeClass('active').end().find('.section-body > div:eq(' + idx + ')').show().siblings().hide();
$(elt).addClass('active');
});
});
答案 2 :(得分:1)
不能只是简单地使用jQuery表示法
jQuery(this).index();
或者如果真的需要将jquery放到noConflict模式
jQuery.noConflict();
现在$ control被返回到其他库。在这里查看更多: http://api.jquery.com/jquery.noconflict/