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

时间:2017-07-23 18:12:59

标签: javascript

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

如果存在指向网站的链接&包含查询参数

//追加参数

否则,如果网站链接存在&不包含参数

//添加参数

以下是我必须检查链接是否存在 - 哪个有效,但不考虑链接是否包含现有(?)

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';}
   });

7 个答案:

答案 0 :(得分:0)

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

"website.com/hello?asdf=asdf".includes("?") // returns boolean

如果网址包含?,则会显示参数。

答案 1 :(得分:0)

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

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';
   }
});

答案 2 :(得分:0)

links.map(function(link) {
  if(link.indexOf('?')) {
    return link + '&someparam=1';
  } else {
    return link + '?someparam=1';
  }
});

答案 3 :(得分:0)

除了其他好的答案之外,您还可以使用documentation并询问search是否为空字符串。虽然这是一种实验性技术(根据MDN),但它在所有主流浏览器中都有支持(期望IE,当然,滚动眼睛)。



var links = document.getElementsByTagName('a');

Array.prototype.slice.call(links).forEach(l => {
  if (new URL(l.href).search) {
    // URL contains query parameter
    console.log(l);
  }
});

<a href="http://example.com?foo=bar">Foo</a>
<a href="http://example.com">Bar</a>
&#13;
&#13;
&#13;

答案 4 :(得分:0)

您还可以使用正则表达式进行验证。例如:

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';
    }
});

答案 5 :(得分:0)

我刚刚做了这个并在我的机器上进行测试,它很酷。

<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>

请尝试检查你的机器

答案 6 :(得分:-1)

我通常像这样解决它

}