Добавить параметр к ссылкам на странице с помощью jquery

Как добавить, скажем, что-то вроде ajax=1 ко всем ссылкам на моей странице с jquery. Мне также нужно будет проверить, есть ли у url существующие параметры. например, http://example.com/index.php?pl=132 должно стать http://example.com/index.php?pl=132&ajax=1

Кроме того, если ссылка не имеет каких-либо параметров, например http://example.com/index.php, она станет http://example.com/index.php?ajax=1. Я хочу загрузить jQuery script на документе, чтобы все ссылки были изменены при загрузке страницы.

Ответ 1

Если вас интересуют плагины, там jQuery Объект строки запроса. Это позволит вам просто проверять параметры в querystring и, при необходимости, добавлять больше, удалять или редактировать другие.

Ответ 2

Вы можете сделать что-то вроде этого:

$(function() {
   $("a").attr('href', function(i, h) {
     return h + (h.indexOf('?') != -1 ? "&ajax=1" : "?ajax=1");
   });
});

В document.ready это смотрит на каждый <a>, смотрит на него href, если он содержит ? уже добавляет &ajax=1, если он этого не делает, он добавляет ?ajax=1.

Ответ 3

Вот так:

$(function() {
    $('a[href]').attr('href', function(index, href) {
        var param = "key=value";

        if (href.charAt(href.length - 1) === '?') //Very unlikely
            return href + param;
        else if (href.indexOf('?') > 0)
            return href + '&' + param;
        else
            return href + '?' + param;
    });
})

Ответ 4

Вот решение, которое я собрал для собственного Javascript, оно поддерживает существующие строки запросов и привязки:

function addToQueryString(url, key, value) {
    var query = url.indexOf('?');
    var anchor = url.indexOf('#');
    if (query == url.length - 1) {
        // Strip any ? on the end of the URL
        url = url.substring(0, query);
        query = -1;
    }
    return (anchor > 0 ? url.substring(0, anchor) : url)
         + (query > 0 ? "&" + key + "=" + value : "?" + key + "=" + value)
         + (anchor > 0 ? url.substring(anchor) : "");
}

Я разместил свои существующие тесты на JSBin: http://jsbin.com/otapem/2/

Ответ 5

Принимая то, что указано выше, это лучший способ конкатенации параметров ссылок.

Также избегайте ссылки с href как href= "Javascript: YourFunction();"

$(function(){                                      
   var myRandom = getRandom();       
   $('a[href]').each(function(i){
        var currHref = $(this).attr("href");
        var isAfunction = currHref.substring(0,10);              
        if(isAfunction == "javascript"){                
            $(this).attr("href",currHref);
        }else{
            if (currHref.charAt(currHref.length - 1) === '?')                           
                $(this).attr("href",currHref);
            else if (currHref.indexOf('?') > 0)                
                $(this).attr("href",currHref+"&rand="+getRandom());
            else                  
                $(this).attr("href",currHref+"?rand="+getRandom());
        }
   });               
});
function getRandom(){
    var randomnumber = Math.floor(Math.random()*10000); 
    return randomnumber;
}

Ответ 6

href должен быть полным и исправленным URL.

$(function() {
  $('a[href]').attr('href', function(index, href) {
    var url = new URL(href);
    url.searchParams.set('ajax',1);
    return url;
  });
})

JSFiddle