我想检查指向特定页面的链接是否包含查询参数/问号。
如果存在指向网站的链接&包含查询参数
//追加参数
否则,如果网站链接存在&不包含参数
//添加参数
以下是我必须检查链接是否存在 - 哪个有效,但不考虑链接是否包含现有(?)
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';}
});
答案 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;
答案 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)
我通常像这样解决它
}