Javascript document.createElement(';a';)在这段代码中做什么?

Javascript document.createElement(';a';)在这段代码中做什么?,javascript,createelement,Javascript,Createelement,我找到了一些代码,可以从URL获取?a=1&b=2格式的参数,但有些部分我不理解 在某种程度上,我可以算出最后一部分-他正在拆分“&”上的字符串,然后提取“=”符号两侧的部分。我不太理解decodeURIComponent函数,我查了一下,仍然感到困惑。不过,主要问题在于这三条线: var parser = document.createElement('a'); parser.href = window.location.href; var query = parser.search.subs

我找到了一些代码,可以从URL获取
?a=1&b=2
格式的参数,但有些部分我不理解

在某种程度上,我可以算出最后一部分-他正在拆分“&”上的字符串,然后提取“=”符号两侧的部分。我不太理解decodeURIComponent函数,我查了一下,仍然感到困惑。不过,主要问题在于这三条线:

var parser = document.createElement('a');
parser.href = window.location.href;
var query = parser.search.substring(1);
让一个不存在的元素如何工作,为什么他可以做
parser.href
,为什么做
parser.search.substring(1)

完整代码:

function get_params() {
    var params = {};
    var parser = document.createElement('a');
    parser.href = window.location.href;
    var query = parser.search.substring(1);
    var vars = query.split('&');
    for (var i = 0; i < vars.length; i++) {
        var pair = vars[i].split('=');
        params[pair[0]] = decodeURIComponent(pair[1]);
    }
 }
函数get_params(){ var params={}; var parser=document.createElement('a'); parser.href=window.location.href; var query=parser.search.substring(1); var vars=query.split('&'); 对于(变量i=0;i
上面的代码创建一个html
标记,并在浏览器窗口中创建指向当前页面的链接。

使用
解析器。搜索
无效。不知道那里发生了什么,也不知道为什么他们制作了一个
元素只是为了在上面加一个href。下面是一些类似的方法:

function get_params() {
    var params = {};
    var href = window.location.href;
    href = href.substring(href.lastIndexOf("?"), href.length)
    var vars = href.split('&');
    for (var i = 0; i < vars.length; i++) {
        var pair = vars[i].split('=');
        params[pair[0]] = decodeURIComponent(pair[1]);
    }
}
函数get_params(){ var params={}; var href=window.location.href; href=href.substring(href.lastIndexOf(“?”),href.length) var vars=href.split('&'); 对于(变量i=0;i
至于
decodeURIComponent
,URL有一些编码字符用于传输。例如,空格由
%20
表示。此函数将其解码回常规字符串。

它创建一个
元素,其
href
属性等于当前URL。然后查询该元素以获取get查询字符串

但是,这三条线:

var parser = document.createElement('a');
parser.href = window.location.href;
var query = parser.search.substring(1);
可以替换为:

 var query = window.location.search.substring(1);

如果您在浏览器控制台中测试它,它似乎确实起作用:它看起来像是
:URLSearchParams似乎是最现代的。不要认为它不存在,因为它确实存在,只是没有连接到DOM,所以您看不到它。但是,您仍然可以使用它。元素不“不存在”-它在代码中作为变量存在。它只是没有被添加到DOM(即添加到页面)。所有HTML元素都可以表示为代码变量,无论它们当前是否是实际页面的一部分。decodeURIComponent将解码querystring值中的任何特殊字符。e、 g.如果查询字符串参数看起来像“param1=a&B”…则浏览器将
&
编码为
%26
。它必须这样做,因为
&
是URL中的一个特殊字符,表示参数之间的边界(例如,您可能有
param1=X¶m2=Y
-浏览器知道param2从何处开始,因为
&
),否则会混淆边界的位置,并在其中添加一个额外的&。因此,为了恢复原始输入值,需要再次对其进行解码。顺便说一句,代码中使用字符串拆分提取参数的部分有些过时-该类可以在现代浏览器中为您执行此操作。
 var query = window.location.search.substring(1);