我想在现有DOM中添加一个元素以运行javascript代码。
我是用YUI做的:
var scriptNode = Y.Node.create('<script type="text/javascript" charset="utf-8">alert("Hello world!");<\/script>');
var headNode = Y.one('head');
headNode.append(scriptNode);
它已成功添加到DOM但它没有给我提醒。
有人知道问题是什么吗?
答案 0 :(得分:45)
我不知道YUI的Node.create()
函数是如何工作的,所以没有评论。但是一个简单的跨浏览器脚本是:
window.onload = function() {
var s = document.createElement('script');
s.type = 'text/javascript';
var code = 'alert("hello world!");';
try {
s.appendChild(document.createTextNode(code));
document.body.appendChild(s);
} catch (e) {
s.text = code;
document.body.appendChild(s);
}
}
try..catch 块是必要的,因为大多数浏览器都喜欢第一种方法,但有些浏览器不会抛出错误。第二种方法包括那些。您也可以简单地评估代码,这或多或少等同于某些库所做的。
答案 1 :(得分:3)
我在JQuery源代码中找到了这个函数,它似乎做了你想做的事情,感觉比其他方法更清晰。但是我再次成为JS初学者,可能不会看到细节。无论如何,有人可能会采取一些有用的东西。
function DOMEval( code, doc ) {
doc = doc || document;
var script = doc.createElement( "script" );
script.text = code;
doc.head.appendChild( script ).parentNode.removeChild( script );
}