我們的AJAX框架的工作原理是它返回一個可能包含標籤的HTML片段。然後,我們將這段HTML代碼設置爲元素的innerHTML。在IE 6/7中,它似乎忽略了標籤,因此返回的HTML格式不正確。在IE 6或7中使用AJAX加載HTML時處理樣式標記的最佳方式是什麼?
我想知道如果其他人遇到類似的問題,如果是的話,他們是如何處理它們的。我知道我可以使用JavaScript庫(我們使用YUI)動態獲取外部樣式表,所以我可以將其轉換爲外部樣式表。只是想知道是否有其他方法來解決這個問題。
我們的AJAX框架的工作原理是它返回一個可能包含標籤的HTML片段。然後,我們將這段HTML代碼設置爲元素的innerHTML。在IE 6/7中,它似乎忽略了標籤,因此返回的HTML格式不正確。在IE 6或7中使用AJAX加載HTML時處理樣式標記的最佳方式是什麼?
我想知道如果其他人遇到類似的問題,如果是的話,他們是如何處理它們的。我知道我可以使用JavaScript庫(我們使用YUI)動態獲取外部樣式表,所以我可以將其轉換爲外部樣式表。只是想知道是否有其他方法來解決這個問題。
當然最好的方法是純粹的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);
}
內聯樣式標籤應該被識別。 Styelsheet塊不會,因爲它們是在頁面的初始渲染時加載的。
您可以動態地將類添加到現有的樣式表中,但是您必須解析HTML片段以抓取所發現的內容並在腳本中執行。
你可以嘗試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
絕對是最可靠的方法,特別是當它涉及到進一步的操作。 IE 6/7根本不會在表上執行innerHTML。另外,不要使用HTML?這是雅虎使用的嗎? – 2009-01-22 21:24:37