jQuery UI 1.8 具有add 和remove 方法(和相关事件),用于动态删除或添加标签到您的小部件。
从legacy 1.8 documentation 到tabs:
-
添加(网址,标签[,索引])
添加标签。
删除(索引)
删除标签。
这两种方法使用了以下选项:
panelTemplate 类型:字符串
默认值:“”
在使用 add() 方法添加选项卡或即时为远程选项卡创建面板时,从中创建新选项卡面板的 HTML 模板。
tabTemplate 类型:字符串
[see doc]
idPrefix 类型:字符串
[see doc]
如您所见,panelTemplate 是使用 add 方法创建面板的 HTML 模板。
所有这些现在都已弃用 - 当前动态添加或删除选项卡的方法是借助新的 refresh 方法:
刷新()
处理直接在 DOM 中添加或删除的任何选项卡并重新计算选项卡面板的高度。结果取决于内容和 heightStyle 选项。
此方法不接受任何参数。
正如升级指南所述,您需要删除脚本中的所有 add 和 remove 方法调用,将它们替换为直接操作 DOM 的代码,然后调用 refresh()。
此外,您需要丢弃idPrefix、tabTemplate 和panelTemplate 的任何设置选项。
正如您的代码所暗示的,您正在使用add 方法,例如:
$("#main-xxx-tabs").tabs("add", "/remote/tab.html", "New Tab");
使用新的tabs API,您应该执行类似的操作(考虑到您当前的panelTemplate 值):
/* Add tab */
$("#main-xxx-tabs .ui-tabs-nav")
.append("<li aria-controls='newTabID1'><a href='/remote/tab.html'>New Tab</a></li>")
/* Add respective tab panel (content) and refresh widget */
$("#main-xxx-tabs")
.append("<div id="newTabID1" class='main-xxx-tabs-content'>New Tab Content</div>");
.tabs("refresh");
这将创建一个新标签。如果您不需要远程加载(ajax)选项卡,您可以将href 的值替换为与aria-controls \ id 相同。
最后,升级指南还给你一个how to remove a tab with the new API的例子。
编辑:
如果您只是使用panelTemplate 作为主要(第一个)选项卡的模板,而不是动态创建它们,则适用相同的规则;您将不得不直接添加适当的 html。如果你升级前的html是:
<div id="main-xxx-tabs">
<ul>
<li><a href="link1.php">link1</a></li>
<li><a href="link2.php">link2</a></li>
</ul>
</div>
那么你应该按照以下方式做一些事情:
<div id="main-xxx-tabs">
<ul>
<li><a href="#tabs-1">Preloaded</a></li>
<li><a href="link1.php">link1</a></li>
<li><a href="link2.php">link2</a></li>
</ul>
<!-- vv Constructed from your original panelTemplate vv -->
<div id="tabs-1" class="main-xxx-tabs-content">
<p>Your preloaded content here.</p>
</div>
</div>
为了进一步澄清,panel 是标签的内容 div。
对于加载 ajax 的选项卡,您无需创建面板 - 它将自动为您创建。
如此有效,要让事情重新开始,您只需删除panelTemplate 选项即可。
这是一个展示 ajax 加载以及预加载选项卡的 JSFiddle:
http://jsfiddle.net/losnir/LWmVv/
另请参阅jQuery UI Tabs Documentation。