我的代码如下:
<div>
<script type="text/javascript">
(function() {
var s = document.createElement('script');
s.type = 'text/javascript';
s.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'localhost/chat/logo.js');
var t = document.getElementById('craftysyntax');
t.appendChild(s, t);
})();
</script>
<div>
我希望async'加载的文件能够做到这样的事情(注意:这不是js代码,但这是我想做的)
parent.appendChild(abc);
将在父abc
中添加子元素div
。
那么,脚本是否可以引用其父容器?
编辑:
我为什么要这样做?
我的网站(在线商店)使用聊天程序,导航栏中的链接会根据是否有操作员登录聊天程序而更改。我试图将程序转换为使用异步加载器,但外部js如果已异步加载则不能使用document.write
。我试图将脚本中的所有document.write
调用转换为使用dom。
答案 0 :(得分:3)
当您的代码立即执行时,最后一个script
元素将是当前元素(因为同步下载和执行)。
因此,您可以获取对所有script
元素的引用,然后使用length
属性减去一个来获取最后一个元素。
然后,您可以使用parentNode
属性访问其父节点。
<script type="text/javascript">
var allScripts = document.getElementsByTagName('script'),
thisScriptParent = allScripts[scripts.length - 1].parentNode;
</script>
此外,无需使用三元来检查https
。只需使用无协议(//localhost/chat/logo.js
),它就会解析为父网站的协议。
答案 1 :(得分:0)
我认为您无法可靠地获取代码运行的脚本标记。
我不确定为什么你的logo.js脚本不只是通过它的id(“craftysyntax”)直接获取元素,但是如果你正在寻找一个更通用的解决方案(你可以说,添加多个)这些元素/脚本连续快速地连接到文档中,而不会让它们互相混乱),你可以这样做:
<div>
<script type="text/javascript">
(function() {
var s = document.createElement('script');
s.type = 'text/javascript';
s.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'localhost/chat/logo.js');
var t = document.getElementById('craftysyntax');
if (window.global_chatElems == null)
global_chatElems = [];
global_chatElems.push(t);
t.appendChild(s);
})();
</script>
<div>
然后在你的logo.js脚本中:
if (window.globalChatElems) {
for (var i=0; i<globalChatElems.length; i++)
processChatElem(globalChatElems[i]);
window.globalChatElems = null;
}
当然,如果你每页只允许其中一个元素,那么一切都要简单得多......不需要将全局变成一个数组,它只能是一个变量。
答案 2 :(得分:0)
我将让内联脚本根据当前时间(或类似的东西)创建自己的div
然后我可以将div的id传递给查询字符串中的另一个脚本。
(我已经拥有getQueryString
功能)
内联
<script type="text/javascript">
var randval = "helpbox" + Math.floor(Math.random()*10000);
document.write('<div id="' + randval + '"></div>');
(function() {
var csc = document.createElement('script');
csc.type = 'text/javascript';
csc.src = 'a1.js?divid=' + randval;
var s = document.getElementById('help');
s.appendChild(csc, s);
})();
外部
var my_div = document.getElementById(getQuerystring('divid'));