将 jQuery-UI 选项卡移至另一组

发布于 2024-12-01 12:51:26 字数 724 浏览 1 评论 0原文

我有 2 组 (set1,set2) 选项卡(全部使用 add 方法创建)。我也将两个集合都设置为可排序,并使用可排序的连接列表选项,我可以将选项卡从 set1 移动到 set2,反之亦然。

但这不会移动包含选项卡内容的 div。因此,我编写了以下函数来移动 div (当触发 sortable 的 over 事件时调用

    migrateTabDiv:function(e,ui){
        console.log( ui.item.find("a").attr("href") );
        console.log( $(this).parent() );
        var relatedContentDiv=$( ui.item.find("a").attr("href") );

        console.log(relatedContentDiv);
        $(this).parent().append( relatedContentDiv[0] );
    }

此代码将 Div 移动到正确的集合,但现在当我尝试使选项卡处于活动状态时,我收到以下错误

未捕获的 jQuery UI 选项卡:片段标识符不匹配。

我从中了解到的是,UI 选项卡也使用某种内部表示形式,它将选项卡内容与一组

基本功能 相关联。我想要实现的是能够将选项卡从一组选项卡拖到另一组选项卡中。 我怎样才能使这成为可能?

I'm having 2 sets (set1,set2) of tabs (all created using the add method). I also have both sets to sortable and using the connected-list option of sortable, I've made it possible to move tabs from set1 to set2 and vice versa.

But this doesn't move the div containing the content of the tab. So, I wrote the following function to move the div also (called when the over event of sortable is triggered

    migrateTabDiv:function(e,ui){
        console.log( ui.item.find("a").attr("href") );
        console.log( $(this).parent() );
        var relatedContentDiv=$( ui.item.find("a").attr("href") );

        console.log(relatedContentDiv);
        $(this).parent().append( relatedContentDiv[0] );
    }

This code moves the Div to the correct set but now when I try to make a tab active,I get the following error

Uncaught jQuery UI Tabs: Mismatching fragment identifier.

What I understand from this is that the UI tabs use some kind of internal representation too which relates a tab content to a set.

The basic functionality that I'm trying to achieve is to be able to drag a tab from one set of tabs into another set of tabs.
How can I make this possible?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

如若梦似彩虹 2024-12-08 12:51:26

我已经解决了这个问题。这不是最有效的方法,但它确实有效

migrateTabDiv:function(e,ui){

    var oldIndex=ui.item.data('originIndex');
    var label=ui.item.find("a").text();
    var id=ui.item.find("a").attr("href");
    var currentIndex = ui.item.index()+1;


    var jRelatedTabContentDiv=$( id ).find(".tabContent").detach(); //detach and keep the old content

    ui.sender.parent().find( id ).remove(); // remove the old div 
    ui.item.remove(); // remove the tab li that is appended by the sortable in the new set


    $(this).parent().sortable( "refresh" ).tabs("add", id , label, currentIndex);  //add a similar tab
    $(this).parent().find( id ).append( jRelatedTabContentDiv );  //add teh old content
}

,并且选项卡初始化如下

$("#fileTabsMain").tabs().find( ".ui-tabs-nav" ).sortable({
         connectWith: "#fileTabsVSplit .ui-tabs-nav",
         placeholder: "ui-state-highlight",
         forcePlaceholderSize:true,
         receive:interfaceView.migrateTabDiv,
         start: function(event, ui) {
                    ui.item.data('originIndex', ui.item.index());
                 },
         });

,#fileTabsVSplit 也有类似的初始化。

I've hacked together a work around. It is not the most efficient method but it works

migrateTabDiv:function(e,ui){

    var oldIndex=ui.item.data('originIndex');
    var label=ui.item.find("a").text();
    var id=ui.item.find("a").attr("href");
    var currentIndex = ui.item.index()+1;


    var jRelatedTabContentDiv=$( id ).find(".tabContent").detach(); //detach and keep the old content

    ui.sender.parent().find( id ).remove(); // remove the old div 
    ui.item.remove(); // remove the tab li that is appended by the sortable in the new set


    $(this).parent().sortable( "refresh" ).tabs("add", id , label, currentIndex);  //add a similar tab
    $(this).parent().find( id ).append( jRelatedTabContentDiv );  //add teh old content
}

And the tabs initialisation goes as

$("#fileTabsMain").tabs().find( ".ui-tabs-nav" ).sortable({
         connectWith: "#fileTabsVSplit .ui-tabs-nav",
         placeholder: "ui-state-highlight",
         forcePlaceholderSize:true,
         receive:interfaceView.migrateTabDiv,
         start: function(event, ui) {
                    ui.item.data('originIndex', ui.item.index());
                 },
         });

And a similar initialization for #fileTabsVSplit also.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文