Javascript没有在合适的空间写空间

时间:2015-07-27 23:23:48

标签: javascript html twitter-bootstrap

我有这个javascript

function getTags(tags){
    tags = JSON.parse(tags);
    text = "";
    for (i = 0; i < tags.length; i++) {
        text += '<span class="label label-strong">' + tags[i] + '</span>&nbsp';
    }
    return text;
}

和这个带引导程序3的HTML

<div class="pull-right">
    <script>document.write(getTags('["Factions", "Minigames"]'));</script>
</div>

并且在页面中,在所有跨度之后,应该在两个跨度之间的空间被写入。 即使我删除那个“拉右”空间仍然被写错了

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

许多开发人员会告诉你document.write()是邪恶的。我倾向于同意Peter Bailey's response,很容易严重滥用它。

无论如何,你的脚本开始时相当安全,但后来Rocket Loader得到了它并决定在页面加载后尝试运行它。它应该能够在window.onload&#34;之后安全地运行任何JavaScript代码,这意味着它会修改您的脚本以便安全运行。您无法在document.write()之后安全地执行window.onload

无论Rocket Loader正在做什么,它都会破坏你的代码,因为当它作为真正的JavaScript运行而不是&#34; RocketScript&#34;时,它运行得很好。因此,您可以将脚本编辑为&#34; safe&#34;或禁用RocketScript。编写代码的更安全的方法是动态构建节点。您的页面已经使用了jQuery,因此示例代码也可以使用:

&#13;
&#13;
$(function(){
    var nbsp = "\xA0";
    $("[data-tags]").each(function(){
        var el = $(this);
        var tags = el.data("tags").split(",");
        for (var i = 0; i < tags.length; i++) {
            var tag = $("<span>");
            tag.addClass("label label-strong");
            tag.text(tags[i]);
            el.append(tag, nbsp);
        }
    });
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<div class="pull-right" data-tags="Factions,Minigames"></div>
&#13;
&#13;
&#13;