我聽說使用el.innerText||el.textContent
可以產生不可靠的交叉瀏覽結果,所以我正在步行DOM樹以遞歸方式收集文本節點,並將它們寫入HTML主體中的標籤。Element.appendChild()在IE中氾濫...解決方法? (與innerText vs textContent有關)
這個腳本是做什麼的,是從window.location中讀取hash substring valus,並將它們寫入HTML。
此腳本適用於Chrome & Firefox,但在IE中窒息。
我所說的頁面的URL語法如下:
http://example.com/pagename.html#dyntext=FOO&dynterm=BAR&dynimage=FRED
更新的版本?
解決方案:
我</body>
之前移動腳本(他們應該在那裏)然後刪除console.log(sPageURL);
現在它'使用Chrome,Firefox,IE8和IE9的s 。
這是我對innerText vs textContent crossbrowser問題的解決方法,當您只是放置文本而不是獲取文本時。在這種情況下,從window.location獲取哈希子串值並將它們寫入頁面。
<html>
<body>
<span id="dyntext-span" style="font-weight: bold;"></span><br />
<span id="dynterm-span" style="font-style: italic;"></span><br />
<span id="dynimage-span" style="text-decoration: underline;"></span><br />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min.js"></script>
<script>
$(document).ready(function() {
var tags = ["dyntext", "dynterm", "dynimage"];
for (var i = 0; i < tags.length; ++i) {
var param = GetURLParameter(tags[i]);
if (param) {
var dyntext = GetURLParameter('dyntext');
var dynterm = GetURLParameter('dynterm');
var dynimage = GetURLParameter('dynimage');
}
}
var elem = document.getElementById("dyntext-span");
var text = document.createTextNode(dyntext);
elem.appendChild(text);
var elem = document.getElementById("dynterm-span");
var text = document.createTextNode(dynterm);
elem.appendChild(text);
var elem = document.getElementById("dynimage-span");
var text = document.createTextNode(dynimage);
elem.appendChild(text);
});
function GetURLParameter(sParam) {
var sPageURL = window.location.hash.substring(1);
var sURLVariables = sPageURL.split('&');
for (var i = 0; i < sURLVariables.length; i++) {
var sParameterName = sURLVariables[i].split('=');
if (sParameterName[0] == sParam) {
return sParameterName[1];
}
}
}
</script>
</body>
</html>
最後更新
如果散列字符串值需要空間(如語言短語與三個單詞,例如),然後用在您的URI的+
字符分隔的話,並在創建每個文本節點時用空格替換Unicode字符\u002B
,如下所示:
var elem = document.getElementById("dyntext-span");
var text = document.createTextNode(dyntext.replace(/\u002B/g, " "));
elem.appendChild(text);
var elem = document.getElementById("dynterm-span");
var text = document.createTextNode(dynterm.replace(/\u002B/g, " "));
elem.appendChild(text);
var elem = document.getElementById("dynimage-span");
var text = document.createTextNode(dynimage.replace(/\u002B/g, " "));
elem.appendChild(text);
現在,形成你的URI是這樣的:
http://example.com/pagename.html#dyntext=FOO+MAN+CHU&dynterm=BAR+HOPPING&dynimage=FRED+IS+DEAD
你可以更具體的「窒息IE」?什麼版本的IE? IE開發工具(F12)中的任何錯誤?此外,jQuery 1.8中的一個[已知問題](http://bugs.jquery.com/ticket/12282)是它可能在IE9/10中過早觸發DOM Ready處理程序。將腳本移動到'
'標記的末尾(他們應該在的位置)或者升級到jQuery 1.8.1,或者兩者都行(這更合適)。 –您需要列出您在IE中遇到的每個問題,因爲appendChild在IE中至少可以一直回到IE6。添加jQuery和一個不必要的複雜工作並不能幫助我們理解你最初做錯了什麼。 – austincheney
忘記我的事先評論。您鏈接到的錯誤僅涉及「樣式」標籤,因此整個解決方法無效且不必要。 – austincheney