Javascript 检查链接是否包含查询参数

Javascript 检查链接是否包含查询参数,javascript,Javascript,我想检查指向特定页面的链接是否包含查询参数/问号 是否存在指向站点的链接并包含查询参数 //附加参数 否则,如果存在指向站点的链接&不包含参数 //添加参数 这是我必须检查的链接是否存在-它工作但不考虑链接是否包含现有的 var extDomain = "website.com"; var links = document.getElementsByTagName('a'); Array.prototype.forEach.call(links, function (link) { if (l

我想检查指向特定页面的链接是否包含查询参数/问号

是否存在指向站点的链接并包含查询参数

//附加参数

否则,如果存在指向站点的链接&不包含参数

//添加参数

这是我必须检查的链接是否存在-它工作但不考虑链接是否包含现有的

var extDomain = "website.com";
var links = document.getElementsByTagName('a');

Array.prototype.forEach.call(links, function (link) {
if (link.href.indexOf(extDomain) >= 1)  {   
       link.href += '?foo=bar';}
   });

可以使用includes方法检查字符串是否包含字符。例如:

"website.com/hello?asdf=asdf".includes("?") // returns boolean
如果url有一个?,它就有参数。

您可以使用.slice和元素的参数和.search属性来执行逻辑

var extDomain = "website.com";
var links = document.getElementsByTagName('a');

Array.prototype.forEach.call(links, function (link) {
   if (link.href.indexOf(extDomain) >= 1 && link.href.slice(-1) !== "?"
      || !link.search && link.slice(-1) !== "?")  {   
       link.href += '?foo=bar';
   } 
   if (link.search && link.slice(-1) === "?") {
       link.href += 'foo=bar';
   }
   if (link.search.length) {
       link.href += '&foo=bar';
   }
});

我通常是这样解决的

if (link.href.indexOf(extDomain) >= 1)  { 

    var has_query = link.href.split('?').length === 2;

    if( !has_query ) link.href+='?x=0';

    link.href += '&foo=bar';
}

除了其他好的答案之外,您还可以使用并询问搜索是否不是空字符串。尽管根据MDN,这是一项实验性技术,但它在所有主流浏览器中都有支持,当然,也就是说,滚动眼睛

var links=document.getElementsByTagName'a'; Array.prototype.slice.calllinks.forEachl=>{ 如果是新的URLl.href.search{ //URL包含查询参数 console.logl; } };
您还可以使用regex进行验证。例如:

hasQueryParams = new RegExp(/(\?.*)$/).test(link.href)
// returns true if link has ? char included
在您的情况下,我们将有:

var extDomain = "website.com";
var links = document.getElementsByTagName('a');

Array.prototype.forEach.call(links, function (link) {
    if new RegExp(/(\?.*)$/).test(link.href) {
        link.href += '&foo=bar';
    }
    else {
        link.href += '?foo=bar';
    }
});

我只是在我的机器上做了这个测试,它工作得很酷

<a href="website.com?param1=999">link 1</a>
            <a href="website.com?param2=9d99">link2</a>
            <a href="website.com">link 3</a>
            <a href="website.com">link 4</a>
            <a href="notwebsite.com">link 5</a>
            <a href="notwebsite.com?params=34">link 6</a>



     <script>
var extDomain = "website.com";
            var links = document.getElementsByTagName('a');

            Array.prototype.forEach.call(links, function (link) {
                if ((link.href.indexOf(extDomain) > 0) && (link.href.indexOf('?') === -1 ))  {
                    link.href = extDomain +'?foo=bar';
                    console.log('this does not have a parameter before==='+link.href);
                }else{
                    console.log('already has ? link === '+link.href);
                }
            });
</script>

请检查一下你的机器

为什么不检查一下呢?是否存在以下内容如何被视为包括检查extDomain?link.href.indexOf'?'该代码检查链接是否具有您案例“website.com”中的域名,同时检查链接是否具有?表示参数存在的符号…如果不存在,则将extdomain添加为website.com?foo=bar…注意,仅在以下情况下将其添加到d链接?不存在。您现在可以用新链接替换旧链接。当链接包含以下内容时,该链接似乎不起作用?var links=document.getElementsByTagName'a';Array.prototype.forEach.calllinks,函数link{if link.href.indexOfextDomain>=1&&link.href.indexOf'?'!==1{link.href=extDomain+'?foo=bar';}否则{link.href=extDomain+'&foo=bar';};这是测试和工作良好,请尝试它,让我知道如果你想添加任何其他内容
<a href="website.com?param1=999">link 1</a>
            <a href="website.com?param2=9d99">link2</a>
            <a href="website.com">link 3</a>
            <a href="website.com">link 4</a>
            <a href="notwebsite.com">link 5</a>
            <a href="notwebsite.com?params=34">link 6</a>



     <script>
var extDomain = "website.com";
            var links = document.getElementsByTagName('a');

            Array.prototype.forEach.call(links, function (link) {
                if ((link.href.indexOf(extDomain) > 0) && (link.href.indexOf('?') === -1 ))  {
                    link.href = extDomain +'?foo=bar';
                    console.log('this does not have a parameter before==='+link.href);
                }else{
                    console.log('already has ? link === '+link.href);
                }
            });
</script>