【问题标题】:Obtain a reference to <script> parent element [duplicate]获取对 <script> 父元素的引用 [重复]
【发布时间】:2012-04-24 14:17:48
【问题描述】:

我有一个类似的问题,例如发布的here,但不是获取父 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

提前致谢。

【问题讨论】:

  • 请提供更多信息/代码
  • 您想避免在脚本标签上使用 id 以确保旧版浏览器不会崩溃吗?还是有其他原因?
  • @Esailija:我更新了帖子,希望对你有所帮助:D
  • @hradac:感谢您的评论。两个都。第一个原因很明显,另一个原因是代码会被复制粘贴到同一个网页的多个地方,这使得标识符没有用。
  • @RobW:+1 太棒了!!!谢谢!这正是我需要的! :D。拜托,您可以将您的评论作为答案发表,以便我接受吗?

标签: javascript jquery reference


【解决方案1】:

What is the current element in Javascript? 中所述,当前的&lt;script&gt; 元素也是最后一个&lt;script&gt; 元素,在执行时

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

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;

【讨论】:

  • 我多么希望这可以解决我的问题,但事实并非如此。事实是我的应用程序做了很多 javascript 的动态加载,但 document.scripts 数组确实只包含第一个也是唯一一个实际上在 html 本身中的 javascript 文件。所有后来加载的 js 文件根本不存在...
  • 更简单:document.currentScript.parentElement
  • @user10898116 IE 似乎不支持这个:developer.mozilla.org/en-US/docs/Web/API/Document/currentScript
【解决方案2】:

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

var parentDiv = $('script[src="path/to/script.js"]').parent('div');

【讨论】:

  • 感谢您的回答。脚本源属性对于页面中复制和粘贴的所有代码都是相同的。请参阅对 hradac 的评论。我将更新问题以指出这一点。无论如何感谢您的宝贵时间。
  • 好吧,显然你不会在一个页面中多次加载同一个脚本,所以你可以简单地将脚本的路径名动态构建到一个变量中,然后立即将它注入到选择器中字符串。
【解决方案3】:

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

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

获取页面上第一个脚本的 DOM 元素。或者你可以使用 jQuery 并循环遍历你的脚本来对每个脚本做一些事情:

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

【讨论】:

    猜你喜欢
    • 2017-10-12
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    • 2011-02-28
    • 2020-03-16
    • 1970-01-01
    • 1970-01-01
    • 2017-05-25
    相关资源
    最近更新 更多