0

我正在创建一个小脚本来“帮助”我完成作业。它使用 jQuery。脚本(到目前为止)如下:

var s = document.createElement('script');
document.body.appendChild(s);
s.src = "http://code.jquery.com/jquery-latest.js"; // Include jQuery

var tmp_1 = document.embeds[0].GetVariable("q1answers"); // Read raw values
var answers_1 = tmp_1.split(","); // Explode into array
answers_1.splice(0,1); // Remove first element (always 0)

var tmp_2 = document.embeds[0].GetVariable("q2answers");
var answers_2 = tmp_2.split(",");
answers_2.splice(0,1);

answers_1.push("LINE_BREAK");
var answers = answers_1.concat(answers_2);

$("body").append("<div id='answers-wrap'></div>");
$("#answers-wrap").css("position", "fixed");
$("#answers-wrap").css("background", "none");

当它到达倒数第三行时,就会出现问题。Chrome 控制台声称Object #<HTMLBodyElement> has no method 'append',但是如果我提取该行并将其单独放入控制台,它工作正常。我可以使用另一种方法来插入 HTML,但我想知道这个方法有什么问题。

提前致谢!

4

2 回答 2

7

由于您正在动态添加 jQuery 脚本,因此它是异步加载的,因此当您尝试使用它时它可能尚未加载。使用onload动态脚本块的处理程序:

var s = document.createElement('script');
document.body.appendChild(s);
s.src = "http://code.jquery.com/jquery-latest.js"; // Include jQuery
s.onload = function() {
    $("body").append("<div id='answers-wrap'></div>");
    $("#answers-wrap").css("position", "fixed");
    $("#answers-wrap").css("background", "none");
}

您收到的错误消息还表明$存在(可能是另一个库?)并且没有返回 jQuery 对象,因此您可能必须在“noConflit”模式下使用 jQuery,并使用jQuery或用户定义的别名代替的$

于 2013-05-27T15:32:45.160 回答
4

只是一个猜测,但您可能在浏览器完成渲染 DOM 之前运行脚本吗?

尝试将代码包装在

window.onload = function(){
   // ... your code here
};

为了在加载时执行它。

编辑:$更改代码以反映下面的反馈,当然在加载 jQuery 之前不能使用 jQuery ,我的错。

于 2013-05-27T15:33:04.963 回答