document.createElement('a') 在此代码中做了什么?

what does document.createElement('a') do in this code?

我找到了一些代码来从 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]);
    }
 }
var parser = document.createElement('a');
parser.href = window.location.href;

上面的代码创建了一个html <a> 标签,并在浏览器window.

中创建了一个指向当前页面的link

使用 parser.search 无效。不知道那里发生了什么,或者为什么他们制作一个 <a> 元素只是为了在上面放一个 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]);
    }
}

至于 decodeURIComponent,URL 有一些字符编码用于传输。例如,space 表示为 %20。此函数将其解码回常规字符串。

它创建一个 <a> 元素,其 href 属性等于当前 URL。然后询问此元素以获取 GET 查询字符串。

但是,这 3 行:

var parser = document.createElement('a');
parser.href = window.location.href;
var query = parser.search.substring(1);

可以替换为:

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