替换outerHTML后,jQuery选项卡无法正常工作
在替换以下示例的div的outerHTML之后,jQuery选项卡无法正常工作:outerHTML没有变化,但仍然无法使用制表符更改。 为什么?
当我尝试点击工作但HTML没有替换选项卡。
$("#prod5").tabs({ create: function (event, ui) { debugger; event.target.innerHTML == jqXHR; } }); function data() { var replce = $("#tabs").html(); $("#tabs").html(replce); $("#tabs").tabs('refresh'); }
我正在使用jQuery获取outerHTML“
$("#" + id + "")[0].outerHTML;
并使用jQuery替换outerHTML
$("#" + id + "")[0].outerHTML = replcetext;
但更换后标签更改无效。
以下是replce之前的outerHTML:
function data() { var replce = $("#tabs").html(); $("#tabs").tabs({ create: function (event, ui) { debugger; event.target.innerHTML == replce; // $("tabs").replaceWith(jqXHR); } }); // $("#tabs").html(replce.toString()); //// $('#tabs').tabs('load', $('#tabs').tabs('option', 'active')); //// $('#tabs').html($(replce).html()); // // $("#tabs").tabs('refresh'); // $("#tab-1").load(""); // $("#tab-2").load(""); // $("#tabs").tabs().addClass("ui-helper-clearfix"); // $("#tabs li").removeClass("ui-corner-top").addClass("ui-corner-left"); // // var template = Handlebars.compile(replce); // debugger; // $('#tabs').html(template(data)); }
将您的javascript代码放在文档就绪函数中,如下所示,并在页面末尾。
$( document ).ready(function() { var replce = $("#tabs").html(); $("#tabs").tabs({ create: function (event, ui) { debugger; event.target.innerHTML == replce; // $("tabs").replaceWith(jqXHR); } }); });
所以我提出的第一个解决方案是行不通的。 这是一个新的破坏和重新创建选项卡。
在这种情况下,我是:
- 获取选项卡的当前设置
- 销毁标签
- 用你的方法改变outerhtml
- 然后使用保存的设置重新创建选项卡
var id = 'prod5'; $('#' + id).tabs({ active: 2 }); function clickme() { // save settings var options = $('#' + id).tabs("option"); // destroy tabs $('#' + id).tabs('destroy') // get outerhtml var html = $('#' + id)[0].outerHTML; // apply a random change html = html.replace(/goo/g, 'zar'); // replace the outerHTML, thus the entire element $('#' + id)[0].outerHTML = html; // recreate tabs $('#' + id).tabs(options) } $('#btnReplace').click(clickme);
替换内容后,您需要再次初始化插件
$("#" + id).replaceWith(replcetext).tabs();
当您替换整个html时,插件相关的数据结构将被销毁,这就是它无法正常工作的原因
@Stpdevi,为什么你在尝试使用outerhtml替换? 有什么理由吗?
像这样替换选项卡名称。
$('#ui-id-2').html('Tab Name');
替换Tab文本后,刷新选项卡。 请参考这里。
$( "#prod5" ).tabs( "refresh" );
如果你使用id(#id)的选择器,则不需要指出找到的第一个元素
代替
$("#" + id + "")[0]
使用
$("#" + id + "")
并分配HTML内容使用
$("#" + id + "").html("example")
希望能帮助到你
您可以尝试其他选项,例如handlebar js来生成html
我可能会误解你的问题。 我认为“Arun P Johny”的答案可能有用。
假设您只想更改标签标题和内容。 你可以使用beforeActivate事件,
以下是html代码
$(function () { initTabs(); }); function initTabs() { var tabContent = $("#divInitial").html(); $("#tabs").tabs({ create: function (event, ui) { // here is your original example, the tab's structure will be destroy // event.target.innerHTML = tabContent; // that is main content }, beforeActivate: function (event, ui) { var tabIndex = ui.newTab.index(); // get tab index:JQuery UI 1.9 or later var content = $("#divContentToBeReplace").html(); $("#fragment-" + parseInt(tabIndex + 1)).html("tab" + parseInt(tabIndex + 1) + content); // Change Tab content var title = $("#tabs ul li").eq(tabIndex).text(); $('#tabs ul li:nth-child(' + parseInt(tabIndex + 1) + ') a').text('Other text'); //Change Tab title } }); }