Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Can';t附加<;脚本>;要素_Javascript_Jquery - Fatal编程技术网

Javascript Can';t附加<;脚本>;要素

Javascript Can';t附加<;脚本>;要素,javascript,jquery,Javascript,Jquery,你知道为什么下面的代码没有将script元素添加到DOM中吗 var code = "<script></script>"; $("#someElement").append(code); var code=”“; $(“#someElement”)。追加(代码); 我见过一些问题,一些浏览器在直接执行某些更改时不尊重这些更改(我的意思是从文本创建HTML,就像您尝试使用脚本标记一样),但当您使用内置命令执行这些更改时,效果会更好。试试这个: var script =

你知道为什么下面的代码没有将script元素添加到DOM中吗

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)