我想使用查询字符串参数,这样我就可以指定DOM元素的名称。
我有一些代码需要标题的高度,我希望该代码适用于任何主题。有时标题使用<header>
标记,有时它有特定的标识符,有时它是特定的类...为了能够一遍又一遍地重用该代码,我喜欢以这样的方式包括它:
<script src="https://www.example.com/js/my-script.js?c=header"></script>
我希望能够做到的是&#34;?c =标题&#34;部分来自该JavaScript URL以使用jQuery(".header")
发送搜索DOM对象。我们是否有办法从正在执行的JavaScript中了解JavaScript本身的URL?
显然,我知道window.location.href
并且不是我正在寻找的网址。
答案 0 :(得分:0)
正如@Kaiido在评论中所提到的,document.currentScript
参数可让您访问当前正在运行的<script>
标记。只有一个小技巧,该参数是在第一次传递时定义的,而不是在脚本中执行函数时。
所以我们可以做的就是在全局范围或对象中的静态中保存这些信息,或者至少是你需要的信息。
就我而言,我只是做了以下事情:
// Script to tweak things on many websites
var this_script_url = document.currentScript.src;
jQuery(document).ready(function()
{
// at this point: "document.currentScript === null"
var qs = this_script_url.split("?", 2);
if(qs && 2 == qs.length)
{
... // handle qs[1] which is the query string (a=1&b=3&...)
}
});
请确保您没有使用过于通用的全球名称。它应包括您的脚本名称或其缩写。否则,您可能会与另一个脚本的全局冲突。
现在,如果您有原型对象,我建议您使用静态成员而不是全局成员。
var my_class = {};
my_class.script_url = document.currentScript.src;
// and later you can reference it directly as in:
url = my_class.script_url;
通过这种方式,您更有可能避免碰撞问题(在冲突的情况下,仅需要更改的内容是名称my_class
)。
此时,ES5或ES6 class关键字不允许您创建变量。