Element.appendChild()在IE中使用了...解决方法? (与innerText和textContent相关)

时间:2012-09-01 03:45:47

标签: javascript internet-explorer

我听说使用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); 

1 个答案:

答案 0 :(得分:0)

在代码中使用console.log()时,必须在IE中打开Dev Tools。缺少head元素也可能会导致一些问题。或者只是在这篇文章中遗漏了?

相关问题