如何动态添加和删除jquery选项卡?

时间:2010-03-10 11:45:43

标签: jquery dynamic tabs

我有一个aspx页面,我有2个静态jquery选项卡。单击其中一个选项卡上的按钮,我想动态添加一个新选项卡,从其他aspx页面加载其内容.I我们也试过以下样本

http://jquery-ui.googlecode.com/svn/trunk/demos/tabs/manipulation.html

我已经下载了jquery-ui-1.8rc3.custom zip文件,并尝试将上面的相关脚本,css文件添加到我的asp.net网站并运行,但它似乎没有用。我也是不想打开对话框并要求用户输入标签标题,如上例所示。

请有人帮我这个吗?

感谢。

4 个答案:

答案 0 :(得分:36)

您是否尝试过使用add method标签?

var tabs = $("#tabs").tabs();
$('#tabs-1 button').click(function(){
    tabs.tabs('add','/url_for_tab/','New tab');
});

更新 - 从jQuery UI 1.9开始,添加删除方法已被弃用,在jQuery UI 1.10中,它们已被删除。

现在,对远程(ajax)内容标签执行此操作的正确方法是:

var tabs = $( "#tabs" ).tabs();
var ul = tabs.find( "ul" );
$( "<li><a href='/url_for_tab/'>New Tab</a></li>" ).appendTo( ul );
tabs.tabs( "refresh" );

当你已经拥有内容时:

var tabs = $( "#tabs" ).tabs();
var ul = tabs.find( "ul" );
$( "<li><a href='#newtab'>New Tab</a></li>" ).appendTo( ul );
$( "<div id='newtab'><p>New Content</p></div>" ).appendTo( tabs );
tabs.tabs( "refresh" );

答案 1 :(得分:1)

var main = document.getElementById('main');
var tabber = createMainTab();
tabber.setAttribute("id","tabber")
var mainHelper = createTabHelper();
var testH = createTabHelperElement("Test tab",tabber);
var testTab = createTab(testH);
tabber.appendChild(mainHelper);

mainHelper.appendChild(testH);
tabber.appendChild(testTab);

main.appendChild(tabber);
$(tabber).tabs();

function createMainTab(){
    var mainDiv = document.createElement("div");
    mainDiv.setAttribute("class","ui-tabs ui-widget ui-widget-content ui-corner-all");
    mainDiv.style.height="100%";
    mainDiv.onk_initialised = false;
    return mainDiv;
}
function createTabHelper(){
    var mainUl = document.createElement("ul");
    mainUl.setAttribute("class","ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");
    return mainUl;
}
function createTabHelperElement(name,mainTab){
    var mainLi = document.createElement("li");
    var active = !mainTab.onk_initialised;
    mainTab.onk_initialised=true;
    if(active){
        mainLi.setAttribute("class","ui-state-default ui-corner-top ui-tabs-selected ui-state-active");
    }else{
        mainLi.setAttribute("class","ui-state-default ui-corner-top");
    }
    mainLi.onk_createdActive = active;
    mainLi.onk_id = "tab_"+cache;
    var oLink = document.createElement("a");
    oLink.setAttribute("href","#tab_"+cache);
    oLink.innerHTML = name;
    mainLi.appendChild(oLink);
    cache++;
    return mainLi;
}
function createTab(tabHelper){
    var tabDiv = document.createElement("div");
    if(tabHelper.onk_createdActive){
        tabDiv.setAttribute("class","ui-tabs-panel ui-widget-content ui-corner-bottom");
    }else{
        tabDiv.setAttribute("class","ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");
    }
    tabDiv.setAttribute("id",tabHelper.onk_id);
    return tabDiv;
}

答案 2 :(得分:0)

我也在动态添加标签。

mytabs.tabs('add', '/url_for_tab/', 'New tab title');

可以添加新标签。在我的例子中它是一个动态的jsp文件

答案 3 :(得分:0)

您可能需要获得另外两个jQuery UI Widgets:Dialog和Position。

我遇到了同样的问题:下载了演示版,而且manipulate.html没有用。就我而言,它在页面加载时抛出错误:

$("#dialog").dialog is not a function
   close: function() { 

页面有404s:     jquery.ui.position.js     jquery.ui.dialog.js

因此,该页面具有意外的依赖关系,并且未包含在我的自定义下载中。 我回去了http://jqueryui.com/download

的另一个自定义下载

一旦演示可以解析jquery.ui.dialog.js就可以了,因为对话框功能已存在:

typeof $("#dialog").dialog
"function"