比使用id 更容易的是,只保留标记并使用document.currentScript。 MDN 的链接在 Notes 部分下提到,这是一个需要 JavaScript 同步执行的小怪癖,我将解释如何避免这个陷阱。
请务必注意,如果脚本中的代码作为回调或事件处理程序被调用,这将不会引用 <script> 元素;它只会在最初处理时引用元素。
此解决方案的优点是您不需要使用特殊标记,如果您由于某种原因无法自己访问 HTML(例如,如果它被客户端或开发人员使用您的 API )。
如果脚本是同步执行的(这意味着脚本的主要内容没有包含在事件侦听器或其他一些函数设置为晚于代码“最初正在处理”时进行评估 ),您可以简单地使用 document.currentScript 访问代码中当前正在处理的 <script> 元素。为了演示如何有效地使用它,我将在下面提供一个基本演示。
HTML:
<script type="text/javascript" src="http://bla.com/js/script.js"></script>
http://bla.com/js/script.js 中的 JavaScript:
var myScript = document.currentScript,
mySrc = myScript.getAttribute('src');
console.log(mySrc); // "http://bla.com/js/script.js"
$(function () {
// your other code here, assuming you use jQuery
// ...
});
如果你不希望变量暴露在全局范围内,你也可以这样做:
(function () {
var myScript = document.currentScript,
mySrc = myScript.getAttribute('src');
console.log(mySrc); // "http://bla.com/js/script.js"
$(function () {
// your other code here
// ...
});
}()); // self-executing anonymous function
基本上,关键是在脚本同步执行期间确保并访问document.currentScript,否则它不会引用您期望的内容。