我听说使用el.innerText||el.textContent
会产生不可靠的交叉浏览结果,所以我走DOM树以递归方式收集文本节点,并将它们写入HTML正文中的标记。
这个脚本的作用是从window.location读取哈希子字符串值并将它们写入HTML 。
此脚本适用于我在Chrome& Firefox,但在IE中窒息。
我用这样的URL语法调用页面:
http://example.com/pagename.html#dyntext=FOO&dynterm=BAR&dynimage=FRED
更新更新更新
解决方案:
我将脚本移到</body>
之前(他们本应该去过的地方),然后移除console.log(sPageURL);
,现在在Chrome,Firefox,IE8和IE9中工作。
当您只是放置文本而不是获取文本时,这是针对innerText与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 {创建每个文本节点时带有空格的{1}}字符,如下所示:
\u002B
现在形成你的URI:
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);
答案 0 :(得分:0)
在代码中使用console.log()
时,必须在IE中打开Dev Tools。缺少head
元素也可能会导致一些问题。或者只是在这篇文章中遗漏了?