2009-01-22 57 views
0

我們的AJAX框架的工作原理是它返回一個可能包含標籤的HTML片段。然後,我們將這段HTML代碼設置爲元素的innerHTML。在IE 6/7中,它似乎忽略了標籤,因此返回的HTML格式不正確。在IE 6或7中使用AJAX加載HTML時處理樣式標記的最佳方式是什麼?

我想知道如果其他人遇到類似的問題,如果是的話,他們是如何處理它們的。我知道我可以使用JavaScript庫(我們使用YUI)動態獲取外部樣式表,所以我可以將其轉換爲外部樣式表。只是想知道是否有其他方法來解決這個問題。

回答

1

當然最好的方法是純粹的DOM解決方案,即使用document.createElement來生成服務器返回的所有元素。

但是,當然有一個IE hack可以解決由innertHTML提出的一些問題。不要將響應直接粘貼到DOM中,首先創建一個元素,將其附加到innerHTML,然後將其附加到DOM。

function responseHandler(response) { 
    var div = document.createElement('div'); 
    div.innertHTML = response.responseText 
    document.getElementById('ZE_ELEMENT').appendChild(div); 
} 
+0

絕對是最可靠的方法,特別是當它涉及到進一步的操作。 IE 6/7根本不會在表上執行innerHTML。另外,不要使用HTML?這是雅虎使用的嗎? – 2009-01-22 21:24:37

0

內聯樣式標籤應該被識別。 Styelsheet塊不會,因爲它們是在頁面的初始渲染時加載的。

您可以動態地將類添加到現有的樣式表中,但是您必須解析HTML片段以抓取所發現的內容並在腳本中執行。

見:Totally Pwn CSS with Javascript

0

你可以嘗試jQuery的empty().append()而不是使用html()innerHTML爲IE 6到IE 8它爲我完全加載HTML文檔與內聯樣式。這是代碼示例。

var url = "inline.html"; 
$.ajax({ 
    url: url, 
    success: function (html) { 
     $('#content').empty(); 
     $('#content').append(html); 
    }, 
    error: function() { return null; } 
}); 

有關詳情,請博客鏈接Solution: Inline CSS issue and Ajax call with IE6 to IE8

相關問題