我正在尝试阅读我网站上的所有href元素并执行以下操作:
检查网址是否包含以?location=123
或&location=123
开头的参数(123会随机更改)。如果有任何这些,请将location = 123更改为location = 456
如果找不到其中任何一个,请检查网址是否有?如果是这样,添加& location = 456或者添加?location = 456
我找到了这个答案:https://stackoverflow.com/a/6337376/5675125代码:
$('html').on('mouseover', 'body', function(){
// do something
$('a').attr('href', function() {
return (this.href.indexOf("?") >= 0) ? this.href + "&location=/123/" : this.href + "?location=/123/";
});
});
但是,这会返回:
您可以看到,原始网址+原始网址加上数百个参数。
如何执行此检查,使用123位的正则表达式。
更新:
检查网址是否包含'?'
我正在使用:
var link = $(this).attr('href');
if(link.indexOf("?") >= 0){
link.attr('href', 'YESiContainAQuestionMark');
} else {
link.attr('href', 'NOiDoNotContainAQuestionMark');
}
但是我进入控制台的所有内容都是:
未捕获的TypeError:无法读取属性'includes'的undefined(...)
答案 0 :(得分:0)
您的鼠标悬停功能会多次触发...只需使用$(document).ready
在页面加载时进行一次替换。而不是
$('html').on('mouseover', 'body', function(){
使用
$(document).ready(function() {
$('a').attr('href', function() {
return (this.href.indexOf("?") >= 0) ? this.href + "&location=/123/" : this.href + "?location=/123/";
});
});
答案 1 :(得分:0)
您可以替换特定字符串,如果不起作用,请添加它:
$('a').each(function(){
var href = $(this).attr('href');
var newhref = href.replace('location=123', 'location=456');
if (href == newhref) {
if (href.includes('?')) {
newhref += '&location=456'
} else {
newhref += '?location=456'
}
}
$(this).attr('href', newhref);
});
答案 2 :(得分:-1)
您可能会发现收集网址&和所有查询字符串参数,然后使用参数。
let urlParams;
(window.onpopstate = function() {
let match,
pl = /\+/g, // Regex for replacing addition symbol with a space
search = /([^&=]+)=?([^&]*)/g,
decode = function(s) {
return decodeURIComponent(s.replace(pl, " "));
},
query = window.location.search.substring(1);
urlParams = {};
while (match = search.exec(query))
urlParams[decode(match[1])] = decode(match[2]);
})();
let myLocation = urlParams.location