导致所有HTML被字符串

时间:2016-03-14 21:12:19

标签: javascript html getelementsbyclassname

(我对JS来说相对较新,因此你可能会看到我犯下的愚蠢错误。谢谢。)

我不确定为什么会这样,尤其是当我没有告诉页面添加或删除任何元素时。但基本上,当我运行某些脚本时,除了我在代码中某处使用的随机值外,整个屏幕都是空白的。

可以在任何地方使用的一个示例是调用prompt()而不将结果保存为变量(或只运行javascript:"string"之类的东西)。现在这部分是可以理解的;页面不知道如何处理返回的值,所以它只显示它。不管。

然而,运行此脚本时也会发生同样的事情(这确实是Quizlet的原始Scatter hack)。在运行时,它会逐个浏览所有Scatter术语,向用户发送HTML内容,并更改框的位置。但是,在关闭最后一个警报后,整个屏幕变为白色并显示" 300px"在屏幕的左上角。评论第5行(// x[i].style.left = "300px";)只会使其显示" 600px"代替。

这看起来像一个简单的脚本......这里发生了什么?

var x = document.getElementsByClassName("scatterTermSide lang-en TermText");
for (i = 0; i < x.length; i++) {
    alert("Found item \"" + x[i].innerHTML + "\".");
    x[i].style.left = "600px";
    x[i].style.top = "300px";
}

最终我会扩展这个,所以它会移动非英式瓷砖和你用鼠标悬停的瓷砖(是的,它们会在你悬停后永久改变班级名称),但是在我克服这个问题之前,这种情况不会发生 我可以在here找到我正在运行的Scatter游戏。

2 个答案:

答案 0 :(得分:0)

您所描述的内容听起来像语法错误。根据您编写的代码,您得到的结果实际上是不可能的。对我来说,这是一个红色标记,代码中某处存在遗漏或类似问题。我建议您注释掉代码块,直到您可以删除该问题。你在这里发布的代码没有任何问题,在小提琴中效果很好。

答案 1 :(得分:0)

确保您的书签正确地用uri编码。使用像http://mrcoles.com/bookmarklet/这样的工具来确保它是。当我这样做时,你的代码在提供的Scatter测验中运行良好。

最终产品是:

javascript:(function()%7Bvar%20x%20%3D%20document.getElementsByClassName(%22scatterTermSide%20lang-en%20TermText%22)%3B%20for%20(i%20%3D%200%3B%20i%20%3C%20x.length%3B%20i%2B%2B)%20%7B%20alert(%22Found%20item%20%5C%22%22%20%2B%20x%5Bi%5D.innerHTML%20%2B%20%22%5C%22.%22)%3B%20x%5Bi%5D.style.left%20%3D%20%22600px%22%3B%20x%5Bi%5D.style.top%20%3D%20%22300px%22%3B%20%7D%7D)()