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



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

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

附加参数

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

添加参数

这是我必须检查该链接是否存在的内容 - 该链接有效但不考虑链接是否包含现有的(?

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

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

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

如果一个网址有?,它有参数。

您可以将.slice()与参数-一起使用a元素的.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';
}
});

除了其他很好的答案之外,您还不妨使用 URL 并询问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>

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

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';
}
});
links.map(function(link) {
if(link.indexOf('?')) {
return link + '&someparam=1';
} else {
return link + '?someparam=1';
}
});

我刚刚这样做并在我的机器上测试,它工作得很好。

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

请尝试检查您的机器

我通常这样解决

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

最新更新