获取对 <script> 父元素的引用

IT技术 javascript jquery reference
2021-02-16 07:20:15

我有一个类似的问题,比如在这里发布但不是获取父 id,我如何获得对脚本父的引用,而不必为脚本标记编码 id?

例如,我将以下代码注入网站:

<div>
     some other html tags
     <script src="http://path_to_my_script.js"></script>
</div>

我需要的是在我的path_to_my_script.js文件中我可以获得对外部div.

有一个问题,代码将被复制并粘贴到同一网页的多个位置,这使得标识符无用。

有没有机会做到这一点而无需在整个代码中编码一个 id ?

如果解决方案是使用 jQuery 更好:D

提前致谢。

3个回答

正如JavaScript 中的当前元素是什么?,目前的<script>元素也是最后一个<script>元素,在执行的时间

答案也适用于您的情况,因为外部脚本的加载不会延迟(通过asyncordefer属性)。

var scriptTag = document.getElementsByTagName('script');
scriptTag = scriptTag[scriptTag.length - 1];
var parentTag = scriptTag.parentNode;

大多数浏览器(甚至 IE6)都支持document.scripts. Firefox 从版本 9 开始支持此对象。因此,也可以使用以下代码:

var scriptTag = document.scripts[document.scripts.length - 1];
var parentTag = scriptTag.parentNode;
更轻松: document.currentScript.parentElement
2021-04-20 07:20:15
2021-04-23 07:20:15
我多么希望这能解决我的问题,但事实并非如此。事实是,我的应用程序对 javascript 进行了大量动态加载,但该document.scripts数组只包含第一个也是唯一一个实际上在 html 中的 javascript 文件。所有后来加载的 js 文件根本就不存在......
2021-05-07 07:20:15

您可以使用属性选择器获取具有特定 的脚本src,然后parent('div')跳转到其包含div元素。

var parentDiv = $('script[src="path/to/script.js"]').parent('div');
谢谢你的回答。页面中复制和粘贴的所有代码的脚本源属性都是相同的。请参阅对 hradac 的评论。我将更新问题以指出这一点。无论如何感谢您的时间。
2021-05-02 07:20:15
好吧,显然您不会在单个页面中多次加载相同的脚本,因此您可以简单地将脚本的路径名动态构建到一个变量中,然后立即将其注入选择器字符串中。
2021-05-11 07:20:15

您需要一种方法来引用您的脚本。您还希望如何知道您想要哪个脚本?如果你只有一个脚本,你总是可以做的

var myScript = document.getElementsByTagName("script")[0];

获取页面上第一个脚本的 DOM 元素。或者您可以使用 jQuery 并循环遍历您的脚本来对每个脚本执行某些操作:

$("script").each(function() {
    alert($(this).html());
});