我想使用查询字符串参数,这样就可以指定DOM元素的名称。
我有一些代码,需要的标题的高度,我希望这些代码的任何主题的工作。只有标头有时使用<header>标签,有时它有一个特定的标识符,有时它是一个特定的类……为了能够一次又一次地重用该代码,我希望以如下方式包含它:
<script src="https://www.example.com/js/my-script.js?c=header"></script>我希望能够做的是从该JavaScript URL中获取"?c=header“部分,以便使用jQuery(".header")发送搜索一个DOM对象。我们有没有办法从正在执行的JavaScript中知道JavaScript本身的URL?
显然,我知道window.location.href,但这不是我要找的网址。
发布于 2017-12-29 07:32:16
正如@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类关键字不提供创建变量的功能。
https://stackoverflow.com/questions/48003272
复制相似问题