Please extend the 'move' method to achieve this functionality.
$.extend($.fn.tabs.methods, {
move: function(jq, param){
return jq.each(function(){
moveTab(this, param);
function moveTab(target, param){
var state = $.data(target, 'tabs');
var opts = state.options;
var tabs = state.tabs;
if (param.index < 0){param.index = 0}
if (param.index > tabs.length){param.index = tabs.length}
var ul = $(target).children('div.tabs-header').find('ul.tabs');
var li = $(param.tab.panel('options').tab);
if (param.index >= tabs.length){
var tabIndex = $(target).tabs('getTabIndex', param.tab);
tabs.splice(tabIndex, 1);
tabs.push(param.tab);
li.appendTo(ul);
} else {
var pp = [];
$.map(tabs, function(tab, index){
if (index == param.index){
pp.push(param.tab);
}
if (tab[0] != param.tab[0]){
pp.push(tab);
}
});
state.tabs = pp;
li.insertBefore(ul.children('li:eq('+param.index+')'));
}
}
});
}
})
Usage example:
var t = $('#tt');
var tab = t.tabs('getTab', 2); // get the tab panel
t.tabs('move', {
tab: tab,
index: 1 // move to index 1
});