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>