jquery.html()有“准备好”或“完整”回调吗?

我正在使用DOM插入来生成一些数据输入对话框。 我发现在某些浏览器中,特别是移动浏览器和IE-Mac,在.html()调用之后立即进行的操作不会触发,大概是因为修改后的DOM还没有准备好。 例如:

 $.ajax({ type: "GET", url: url, dataType: 'html', success: function (data, textStatus, jqXHR) { $("#theDialog").html(data); // hide address $("#theDialog #BillingAddress").closest("li").hide(); ... 

这在大多数情况下都有效,但某些浏览器有时无法隐藏指示的

  • 。 调试很困难,因为进入控制台似乎允许浏览器完成DOM插入,因此.hide() 总是在单步调试时工作。

    我想我所追求的是$("#theDialog").on("ready")或者来自.html()方法的回调。 但那些似乎并不存在。

    我想到了

    1. 切换到.load() ,但最终我将转换为JSONP,我不认为.load()支持吗?
    2. .hide()和其他DOM操作放在返回数据中的脚本标记中。

    我怀疑#2是推荐的方法,但是想先在这里进行健全性检查。 有没有人经历过这个?

    非常感谢。

    虽然我之前的回答有效,但它并没有解决你所有的问题。 我建议像:

     var myDiv=document.createElement( 'div' ); myDiv.innerHTML=data; // now do all of your initializing, passing in myDiv like $( myDiv ) $("#theDialog").html(myDiv.innerHTML) .find( '#BillingAddress' ) .closest("li") .hide(); 

    希望这个有效!

    代替:

     $("#theDialog").html(data); // hide address $("#theDialog #BillingAddress").closest("li").hide(); 

    你有没有尝试过:

     $("#theDialog").html(data).find( '#BillingAddress' ).closest("li").hide(); 

    我自己没有经历过这个,但希望这有效!

    它没有回调函数,但你可以使用.promise().done()

     $('#selector').html(someText).promise().done(function(){ //callback code });