2012-01-05 19 views

Odpowiedz

20

można przypisać location.href wartości to obecnie ma plus nowej kwerendy:

(edytowany być przyjazny dla istniejących querystrings)

$("#yourButtonId").click({ 
    var loc = location.href; 
    if (loc.indexOf("?") === -1) 
     loc += "?"; 
    else 
     loc += "&"; 
    location.href = loc + "ts=true"; 
}); 

Albo być bardziej zwięzły:

$("#yourButtonId").click({ 
    var loc = location.href;   
    loc += loc.indexOf("?") === -1 ? "?" : "&"; 

    location.href = loc + "ts=true"; 
}); 
+2

co, jeśli nie są już parametry na końcu adresu URL? – Eliezer

+0

@Eliezer - dobra uwaga, dziękuję –

+0

kopiujesz moją odpowiedź: P http://stackoverflow.com/a/8737675/880434 –

2

Czy masz na myśli:

 

$(document).ready(function() { 
    $("#yourButtonId").click(function() { 
     var currentUrl = window.location.pathname + "?ts=true"; 
    }); 
}); 

 
3
location.href += '?ts=true'; 

Po prostu tak.

+0

Tworzy nieskończoną pętlę – geotheory

23

spróbuj tego kodu,

var separator = (window.location.href.indexOf("?")===-1)?"?":"&"; 
window.location.href = window.location.href + separator + "ts=true"; 

redaguje: celu uniknięcia podwajania parametru lub bardzo duży ciąg w adresie URL, trzeba zastąpić stary param już istnieje.

var url=window.location.href, 
    separator = (url.indexOf("?")===-1)?"?":"&", 
    newParam=separator + "ts=true"; 
    newUrl=url.replace(newParam,""); 
    newUrl+=newParam; 
    window.location.href =newUrl; 
+0

Cóż +1, odkąd ją masz najpierw (i obiecuję, że nie skopiowałem) :-) –

+0

@AdamRackis: nie przeszkadza mi to kopia, czy nie. :) –

+0

, ale co jeśli adres URL zawiera skrót? – fabiangebert

2

Jeśli chcesz stanowią potencjalnego istnienia hash „#” w adresie URL, należy postępować w następujący sposób:

var href = location.href; 
var hasQuery = href.indexOf("?") + 1; 
var hasHash = href.indexOf("#") + 1; 
var appendix = (hasQuery ? "&" : "?") + "ts=true"; 
location.href = hasHash ? href.replace("#", appendix + "#") : href + appendix; 
3

znalazłem wcześniejsze odpowiedzi brakuje i jako taki o to sposób że lepsze uchwyty pozostałe parametry w bieżącej kwerendy

appendToQueryString = function (param, val) { 
    var queryString = window.location.search.replace("?", ""); 
    var parameterListRaw = queryString == "" ? [] : queryString.split("&"); 
    var parameterList = {}; 
    for (var i = 0; i < parameterListRaw.length; i++) { 
     var parameter = parameterListRaw[i].split("="); 
     parameterList[parameter[0]] = parameter[1]; 
    } 
    parameterList[param] = val; 

    var newQueryString = "?"; 
    for (var item in parameterList) { 
     if (parameterList.hasOwnProperty(item)) { 
      newQueryString += item + "=" + parameterList[item] + "&"; 
     } 
    } 
    newQueryString = newQueryString.replace(/&$/, ""); 
    return location.origin + location.pathname + newQueryString; 
} 

Musisz użyć location.href = appendToQueryString(ts, true) rzeczywiście odświeżyć stronę.

+0

Więc podzielisz cały łańcuch zapytania, dodasz jeden element i umieścisz go razem? Dlaczego to zrobiłeś zamiast dodawać nowy parametr? Nie ma sensu ja –

+1

@HorstJahns, aby uniknąć params są powielane – Envil

0

Poprawa z @Bobbzorzen odpowiedź, z możliwością usunięcia param przekazując swoją nazwę tylko:

function AlterQueryString(param, val) { 
    var queryString = window.location.search.replace("?", ""); 
    var parameterListRaw = queryString == "" ? [] : queryString.split("&"); 
    var parameterList = {}; 
    for (var i = 0; i < parameterListRaw.length; i++) { 
     var parameter = parameterListRaw[i].split("="); 
     if (typeof val != 'undefined') { 
      parameterList[parameter[0]] = parameter[1]; 
     } else if (param != parameter[0]) { 
      parameterList[parameter[0]] = parameter[1]; 
     } 
    } 
    if (typeof val != 'undefined') { 
     parameterList[param] = val; 
    } 

    var newQueryString = Object.keys(parameterList).length > 0 ? "?" : ""; 
    for (var item in parameterList) { 
     if (parameterList.hasOwnProperty(item)) { 
      newQueryString += item + "=" + parameterList[item] + "&"; 
     } 
    } 
    newQueryString = newQueryString.replace(/&$/, ""); 
    return location.origin + location.pathname + newQueryString; 
} 

gist: https://gist.github.com/envil/bc1832503bef55ffdabb0cde32bb06f1

3

pełnego wykorzystania API location DOM, i liczyć na hash:

location.protocol + '//' + location.pathname + 
 
    (location.search ? location.search + '&a=b' : '?a=b') + 
 
    location.hash;

3

Zastosowanie:

Przykład:

var url = new URL("http://foo.bar/?x=1&y=2"); 

// If your expected result is "http://foo.bar/?x=1&y=2&x=42" 
url.searchParams.append('x', 42); 

// If your expected result is "http://foo.bar/?x=42&y=2" 
url.searchParams.set('x', 42); 

// Build result 
url.toString(); 
+0

Niestety nie jest jeszcze obsługiwany przez wszystkie przeglądarki https://caniuse.com/#feat=urlsearchparams – Iftah

Powiązane problemy