比使用 an 更容易的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>
中的 JavaScript http://bla.com/js/script.js
:
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
在脚本同步执行期间进行访问,否则它不会引用您期望的内容。