我猜测jQuery对哪个列表属于tabs元素感到困惑。当我将列表附加到幻灯片,然后销毁并重新应用选项卡时,tabs元素会完全中断。
点击' DESTROY AND RESTART'选项卡按钮,您将看到标签被销毁并重新应用没有问题。然后点击“添加列表到第一张幻灯片”,然后点击“DESTROY AND RESTART'再次,您可以看到标签完全断开。
http://codepen.io/anon/pen/JGXBNz
$.widget( "custom.tabs", $.ui.tabs, {
_getList: function() {
var list = this.element.find( "ul.tabs-nav" );
return list.length ? list.eq( 0 ) : this._super();
}
});
我无法找到直接选择标签导航元素的方法。我认为jQuery选择它找到的第一个列表并将其设置为选项卡。 如何在首次找到不同的列表时阻止jQuery中断?
编辑:尽管我不知道如何实现,但仍然在选项卡文档中进行此操作。 http://api.jqueryui.com/tabs/#method-_getList固定IT: 显然jQuery UI允许你扩展小部件,所以我使用_getList让标签只使用特定类的导航。
test.dev
答案 0 :(得分:0)
看起来问题是列表元素的顺序 - 您的第一组UL位于底部。我认为这是因为你想将标签置于底部。如果是这种情况,check out this post使用CSS将标签移动到容器的底部以避免此问题。
如果您没有故意这样做并希望选项卡位于顶部,只需移动容器上方的选项卡UL,其中包含您附加的详细信息。
所以基本上它可以在HTML结构化的时候起作用。
<div class="tabs-element">
<ul class="tabs-nav">
<li><a href="#slider-1-tab-1">ONE</a></li>
<li><a href="#slider-1-tab-2">TWO</a></li>
<li><a href="#slider-1-tab-3">THREE</a></li>
</ul>
<div class="container">
<div id="slider-1-tab-1">ONE</div>
<div id="slider-1-tab-2">TWO</div>
<div id="slider-1-tab-3">THREE</div>
</div>
</div>
答案 1 :(得分:0)
这里的问题似乎是destroy方法在错误的列表上运行,所以你必须更具体地说明被破坏的内容。在刷新选项卡之前,我想出了一些可以通过删除列表子项来实现的功能。可能不是你想要的,但它确实有效。
http://codepen.io/anon/pen/KVzxmb
HTML:
<button id="restart">DESTROY AND RESTART TABS</button>
<button id="add-list">ADD LIST TO FIRST SLIDE</button>
<hr/>
<div class="tabs-element">
<div class="container">
<div class="tab" id="slider-1-tab-1">ONE:</div>
<div class="tab" id="slider-1-tab-2">TWO:</div>
<div class="tab" id="slider-1-tab-3">THREE:</div>
</div>
<ul class="tabs-nav">
<li><a href="#slider-1-tab-1">ONE</a></li>
<li><a href="#slider-1-tab-2">TWO</a></li>
<li><a href="#slider-1-tab-3">THREE</a></li>
</ul>
</div>
和脚本:
$(".tabs-element").tabs();
$("#restart").on("click", function() {
$(".tab").children().empty();
$(".tabs-element").tabs();
});
$("#add-list").on("click", function() {
$("#slider-1-tab-1").append("<ul><li>new list</li><li>new list</li><li>new list</li></ul>");
});
答案 2 :(得分:0)
好的,所以我相信这就是你要找的东西。为了做你想做的事,你需要3个方法
在销毁标签之前,需要完成前两个。重新创建选项卡后,最后一步即可完成。所以你的点击处理程序现在看起来像这样:
$("#restart").on("click", function()
{
saveTabData();
clearTabData();
$(".tabs-element").tabs("destroy");
$(".tabs-element").tabs();
restoreTabData();
});
这三种方法是:
var saveTabData = function() {
$(".container > div").each(function() {
tabData.push({
tab_id: $(this).attr("id"),
tab_val: $(this).html()
});
});
};
var clearTabData = function() {
$(".container > div").each(function() {
$(this).html("");
})
};
var restoreTabData = function() {
$.each(tabData, function(key, value){
$("#" + value.tab_id).html(value.tab_val);
});
}
以下是Code Pen