jQuery检查并更改/添加href中的参数

时间:2016-11-19 03:13:59

标签: jquery regex

我正在尝试阅读我网站上的所有href元素并执行以下操作:

  1. 检查网址是否包含以?location=123&location=123开头的参数(123会随机更改)。如果有任何这些,请将location = 123更改为location = 456

  2. 如果找不到其中任何一个,请检查网址是否有?如果是这样,添加& location = 456或者添加?location = 456

  3. 我找到了这个答案: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/";
    });
    
    });
    

    但是,这会返回:

      

    http://myurl.com.comhttp://myurl.com/?location=/123/abc&location=/123/abc&location=/123/abc&location=/123/abc&location=/123/abc&location=/123/abc&location=/123/abc&location=/123/abc&location=/123/abc&location=/123/abc&location=/123/abc&location=/123/abc&location=/123/abc&location=/123/abc&location=/123/abc&location=/123/abc&location=/123/abc&location=/123/abc&location=/123/abc&location=/123/abc&location=/123/abc&location=/123/abc&location=/123/abc&location=/123/abc&location=/123/abc&location=/123/abc&location=/123/abc&location=/123/abc&location=/123/abc&location=/123/abc&location=/123/abc&location=/123/abc&location=/123/abc&location=/123/abc&location=/123/abc&location=/123/abc

    您可以看到,原始网址+原始网址加上数百个参数。

    如何执行此检查,使​​用123位的正则表达式。

    更新:

    检查网址是否包含'?'

    我正在使用:

     var link = $(this).attr('href');
        if(link.indexOf("?") >= 0){
            link.attr('href', 'YESiContainAQuestionMark');
        } else {
            link.attr('href', 'NOiDoNotContainAQuestionMark');
        }
    

    但是我进入控制台的所有内容都是:

      

    未捕获的TypeError:无法读取属性'includes'的undefined(...)

3 个答案:

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

see original post ref