Javascript jquery.getScript-如何设置属性?

Javascript jquery.getScript-如何设置属性?,javascript,jquery,Javascript,Jquery,我通过简单的操作创建一个脚本 jQuery.getScript('hi.js').done(函数(脚本){/*脚本是纯文本*/}) 正如我们看到的,“done”的参数是“script”,但它只是加载脚本的文本。但是我需要访问元素本身!如果我想将其ID设置为“helloScript”,该怎么办 在vanilla js中,我可以这样做: var script = document.createElement("script"); script.type = "text/javascript"; sc

我通过简单的操作创建一个脚本

jQuery.getScript('hi.js').done(函数(脚本){/*脚本是纯文本*/})

正如我们看到的,“done”的参数是“script”,但它只是加载脚本的文本。但是我需要访问元素本身!如果我想将其ID设置为“helloScript”,该怎么办

在vanilla js中,我可以这样做:

var script = document.createElement("script");
script.type = "text/javascript";
script.src = url;
script.setAttribute('id', 'helloScript'); // <----------------------- this!
document.getElementsByTagName("head")[0].appendChild(script);
var script=document.createElement(“脚本”);
script.type=“text/javascript”;
script.src=url;

script.setAttribute('id','helloScript');// 在脚本元素中调用
attr

$('<script>')
    .attr('id', 'helloScript')
    .attr('src', url)
    .appendTo('head');
$(“”)
.attr('id','helloScript')
.attr('src',url)
.appendTo(“head”);

$.getScript
没有元素。

它看起来不像
。getScript()
提供了一种访问它创建的元素的方法,但是您可以利用jQuery稍微简化您的普通方法:

$('<script>')
    .attr('id', 'helloScript')
    .attr('src', url)
    .appendTo('head');
$(“”)
.attr('id','helloScript')
.attr('src',url)
.appendTo(“head”);
编辑:在使用jQuery创建和附加脚本时,我似乎找不到让脚本onload事件运行的方法,因此如果需要,您可能需要走普通的JS路线。

因为您不能(遗憾地)使用jQuery来完成,所以您可以不用这样做,这比你在问题中的做法要简单得多:

// create script tag
var s = document.createElement('script');

// set script attributes
s.async = 1;
s.src = [whatever];

// inject to DOM
document.head.appendChild(s);
我认为可以知道注入了哪个脚本,然后改变它的属性,但它似乎不起作用。我将进一步研究jQueryGitHub。似乎是在讨论这件事


它似乎将在jQuery版本
3.2.0
中提供,并将像这样工作:

$.ajax({
  dataType : "script",
  url      : "https://some/path",
  attrs    : { nonce: "EDNnf03nceIOfn39fn3e9h3sdfa" },
});

也许这个答案会对您有所帮助,请检查是否有
getScript()
提供了执行此操作的功能。既然你已经有了代码,为什么不直接使用Vanilla JS呢?我建议只使用Vanilla Javascript,因为它似乎能更彻底地解决你的问题。您可以使用
getScript()
,然后在加载脚本后,通过搜索所有脚本标记以查找其中包含正确源代码的脚本标记并向其添加id来查找脚本标记-尽管我无法想象当vanilla js更简单且工作正常时,您为什么会这样做。我不能使用vanilla js,因为我不知道如何检测未加载的事实,所以没有“.fail()”功能,您必须同时执行“readyState”和“script.onerror”(对于某些我不知道的浏览器,甚至可能执行其他操作)。@TheProHands-50k点和660点之间的微小差异;)@但我先回答。我回答了同样的问题,他们否决了我。奇怪的为什么人们建议用四行jQuery替换四行普通javascript?这是不理智的。只有当jQuery实际上更好时才应该使用它——在本例中似乎不是这样。我的建议是坚持使用纯Javascript实现。@jfriend00问题是关于jQuery的,OP要求提供jQuery解决方案。在这里使用jQuery将代码的字符数减少到原来的一半左右,并使其更具可读性,因此,如果OP已经在使用jQuery,为什么不在这里使用它呢?@TheProHands如果可以安慰的话,我也投了反对票:)仅供参考,您不需要
.attr('type','text/javascript')
-您可以删除它。@jfriend00已删除