Javascript Can';t附加<;脚本>;要素
你知道为什么下面的代码没有将script元素添加到DOM中吗Javascript Can';t附加<;脚本>;要素,javascript,jquery,Javascript,Jquery,你知道为什么下面的代码没有将script元素添加到DOM中吗 var code = "<script></script>"; $("#someElement").append(code); var code=”“; $(“#someElement”)。追加(代码); 我见过一些问题,一些浏览器在直接执行某些更改时不尊重这些更改(我的意思是从文本创建HTML,就像您尝试使用脚本标记一样),但当您使用内置命令执行这些更改时,效果会更好。试试这个: var script =
var code = "<script></script>";
$("#someElement").append(code);
var code=”“;
$(“#someElement”)。追加(代码);
我见过一些问题,一些浏览器在直接执行某些更改时不尊重这些更改(我的意思是从文本创建HTML,就像您尝试使用脚本标记一样),但当您使用内置命令执行这些更改时,效果会更好。试试这个:
var script = document.createElement( 'script' );
script.type = 'text/javascript';
script.src = url;
$("#someElement").append( script );
From:我看到过一些问题,一些浏览器在直接执行某些更改时不尊重这些更改(我的意思是从文本创建HTML,就像您尝试使用脚本标记一样),但当您使用内置命令执行这些更改时,情况会更好。试试这个:
var script = document.createElement( 'script' );
script.type = 'text/javascript';
script.src = url;
$("#someElement").append( script );
发件人:你说的“不工作”是什么意思
jQuery检测到您正在尝试创建脚本元素,并将在全局上下文中自动运行该元素的内容。你是说这不适合你吗-
$('#someElement').append('<script>alert("WORKING");</script>');
$('someElement').append('alert(“WORKING”);');
编辑:如果您在运行命令后没有在DOM中看到脚本元素(例如在Firebug中),这是因为正如我所说的,jQuery将运行代码,然后删除脚本元素-我相信脚本元素总是附加到主体中。。。但无论如何,在这种情况下,位置对代码执行绝对没有影响。你说的“不工作”是什么意思 jQuery检测到您正在尝试创建脚本元素,并将在全局上下文中自动运行该元素的内容。你是说这不适合你吗-
$('#someElement').append('<script>alert("WORKING");</script>');
$('someElement').append('alert(“WORKING”);');
编辑:如果您在运行命令后没有在DOM中看到脚本元素(例如在Firebug中),这是因为正如我所说的,jQuery将运行代码,然后删除脚本元素-我相信脚本元素总是附加到主体中。。。但无论如何-在这种情况下,位置绝对不会影响代码的执行。我想做同样的事情,只是在另一个框架中附加一个脚本标记
var url = 'library.js';
var script = window.parent.frames[1].document.createElement('script' );
script.type = 'text/javascript';
script.src = url;
$('head',window.parent.frames[1].document).append(script);
我想做同样的事情,但附加一个脚本标签在其他框架
var url = 'library.js';
var script = window.parent.frames[1].document.createElement('script' );
script.type = 'text/javascript';
script.src = url;
$('head',window.parent.frames[1].document).append(script);
...
…jQuery(“”)。。。
...
字符串文本中的
终止整个脚本,以避免使用“
。
...
…jQuery(“”)。。。
...
字符串文本中的
终止整个脚本,以避免使用“
。可以使用
$.getScript('http://www.whatever.com/shareprice/shareprice.js,函数(){
Display.sharePrice();
});
现在将调用外部脚本,如果无法加载,它将正常降级。可以使用 $.getScript('http://www.whatever.com/shareprice/shareprice.js,函数(){ Display.sharePrice(); }); 现在,将调用外部脚本,如果无法加载,它将正常降级。此操作:
$('body').append($("<script>alert('Hi!');<\/script>")[0]);
$('body')。追加($($('alert('Hi!');)”[0]);
似乎jQuery在脚本方面做了一些巧妙的事情,因此您需要附加html元素而不是jQuery对象。这可以:
$('body').append($("<script>alert('Hi!');<\/script>")[0]);
$('body')。追加($($('alert('Hi!');)”[0]);
jQuery似乎在脚本方面做了一些聪明的事情,因此您需要附加html元素而不是jQuery对象。好消息是: 它100%有效 只需在脚本标记中添加一些内容,例如
alert('voila!')代码>。您可能想问一个正确的问题,“为什么我没有在DOM中看到它?”
卡尔·斯维德伯格对来访者的评论做了很好的解释。我不想重复他的话,你可以在这里直接阅读(我发现很难浏览那里的评论)
jQuery的所有插入方法都使用
一个domManip函数,内部用于
清洁/处理之前和之后的元件
将它们插入DOM之后。
其中一件事就是多曼尼普
函数的作用是拉出任何脚本
将要插入并运行的元素
通过一个“evalScript例程”
而不是把剩下的注射进去
DOM片段的。它插入
单独编写脚本,对其进行评估,
然后将它们从DOM中删除
我相信jQuery的原因之一
这是为了避免“许可”吗
“拒绝”中可能出现的错误
插入时使用Internet Explorer
某些情况下的脚本。
它还避免了重复
插入/计算同一脚本
(这可能导致
问题),如果它在包含
要插入和删除的元素
然后在DOM中移动
接下来,我将通过使用.append()
函数添加脚本来总结坏消息
坏消息是..
你不能调试你的代码
我不是在开玩笑,即使你添加了调试器代码>关键字在要设置为断点的行之间,最终只会获得对象的调用堆栈,而看不到源代码上的断点(更不用说该关键字仅在webkit浏览器中有效,所有其他主要浏览器似乎都忽略了该关键字)
如果您完全理解代码的功能,那么这将是一个小缺点。但如果不这样做,您将最终添加一个调试器代码>关键字到处都是,只是为了找出你(或我)的代码有什么问题。无论如何,还有一种选择,别忘了javascript可以在本机操作HTMLDOM
解决方法。
使用javascript(而不是jQuery)操作HTMLDOM
如果您不想失去调试功能,那么可以使用javascript本机HTML DOM操作。考虑这个例子:
var script = document.createElement("script");
script.type = "text/javascript";
script.src = "path/to/your/javascript.js"; // use this for linked script
script.text = "alert('voila!');" // use this for inline script
document.body.appendChild(script);
function AddScript(url, object){
if (object != null){
// add script
var script = document.createElement("script");
script.type = "text/javascript";
script.src = "path/to/your/javascript.js";
document.body.appendChild(script);
// remove from the dom
document.body.removeChild(document.body.lastChild);
return true;
} else {
return false;
};
};
function DeleteObject(UnusedReferencedObjects) {
delete UnusedReferencedObjects;
}
$(document).ready(function() {
$("<script>", { src : "bootstrap.min.js", type : "text/javascript" }).appendTo("body");
});
var (function(){
var p="https:" == document.location.protocol ? "https://" : "http://";
d=document,
g=d.createElement('script'),
s=d.getElementsByTagName('script')[0];
g.type='text/javascript';
g.src=p+'url-to-your-script.js';
s.parentNode.insertBefore(g,s); })();
var script = document.createElement( 'script' );
script.type = 'text/javascript';
script.innerHTML = 'alert("Hey there... you just appended this script to the body");';
$("body").append( script );
<div id="someElement"></div>
<script>
var code = "<script>alert(123);<\/script>";
$("#someElement").append($(code));
</script>
const script = "console.log('Did it work?')"
new Promise((resolve, reject) => {
(function(i,s,o,g,r,a,m){
a=s.createElement(o),m=s.getElementsByTagName(o)[0];
a.innerText=g;
a.onload=r;m.parentNode.insertBefore(a,m)}
)(window,document,'script',script, resolve())
}).then(() => console.log('Sure did!'))
// With Variable
var code = "\x3Cscript>SomeCode\x3C/script>";
$("#someElement").append(code);
//Without Variable
$("#someElement").append("\x3Cscript>SomeCode\x3C/script>");
var code = "<script></" + "script>";
$("#someElement").append(code);
import appendHtml from 'appendhtml';
const html = '<p>Hello</p><script src="some_js_file.js"></script>';
const container = document.getElementById('some-div');
await appendHtml(html, container);
// appendHtml returns a Promise, some_js_file.js is now loaded and executed (note the await)