2011-01-11 12 views
203

Powiel możliwe:
How can I get query string values?jquery get ciągu kwerendy z URL

Mam następujący adres URL:

http://www.mysite.co.uk/?location=mylocation1 

Co potrzebne jest, aby uzyskać wartość location z adres URL do zmiennej, a następnie użyj go w kodzie jQuery:

var thequerystring = "getthequerystringhere" 

$('html,body').animate({scrollTop: $("div#" + thequerystring).offset().top}, 500); 

Czy ktoś wie, jak pobrać tę wartość za pomocą JavaScript lub jQuery?

+0

Może pomóc some1. https://gist.github.com/helpse/4d4842c69782b9f94a72 – helpse

Odpowiedz

388

Od: http://jquery-howto.blogspot.com/2009/09/get-url-parameters-values-with-jquery.html

To co trzeba :)

Poniższy kod zwróci obiekt JavaScript zawierający parametry URL:

// Read a page's GET URL variables and return them as an associative array. 
function getUrlVars() 
{ 
    var vars = [], hash; 
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&'); 
    for(var i = 0; i < hashes.length; i++) 
    { 
     hash = hashes[i].split('='); 
     vars.push(hash[0]); 
     vars[hash[0]] = hash[1]; 
    } 
    return vars; 
} 

Na przykład, jeśli masz URL :

http://www.example.com/?me=myValue&name2=SomeOtherValue 

Kod zostanie zwrócony:

{ 
    "me" : "myValue", 
    "name2" : "SomeOtherValue" 
} 

i można zrobić:

var me = getUrlVars()["me"]; 
var name2 = getUrlVars()["name2"]; 
+8

Należy zauważyć, że rozwiązanie nie odszyfrowuje wartości parametrów ... i czy nie wydaje się jawnie obsługiwać wartości # w url? Proponuję http://stackoverflow.com/questions/901115/get-query-string-values-in-javascript/901144#901144 zamiast, tak jak @Steve, zrobiłem – Rory

+3

złą odpowiedź. nie obsługuje fragmentów. –

+5

@Rory, tak: To: "http://stackoverflow.com?foo=bar#topic1" da ci {"foo": "pasek # tematu"}.To dlatego biedak poprosił o rozwiązanie dobrze znanej biblioteki, prawdopodobnie mając nadzieję, że znajdzie rozwiązanie, które zostało poddane testom i obejmuje wszystkie bazy (mówię, że to właśnie NAPRAWDĘ znalazł, a nie to jQuery koniecznie to zapewni). – kghastie

11

Zapraszamy do obejrzenia tej stackoverflow answer.

function getParameterByName(name, url) { 
    if (!url) url = window.location.href; 
    name = name.replace(/[\[\]]/g, "\\$&"); 
    var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"), 
     results = regex.exec(url); 
    if (!results) return null; 
    if (!results[2]) return ''; 
    return decodeURIComponent(results[2].replace(/\+/g, " ")); 
} 

Można użyć metody animować:

tj:

var thequerystring = getParameterByName("location"); 
$('html,body').animate({scrollTop: $("div#" + thequerystring).offset().top}, 500); 
23

Łatwym sposobem, aby to zrobić z jakimś jQuery i prostej JS, po prostu zobaczyć konsolę w Chrome lub Firefox, aby wyświetlić wyjście ...

var queries = {}; 
    $.each(document.location.search.substr(1).split('&'),function(c,q){ 
    var i = q.split('='); 
    queries[i[0].toString()] = i[1].toString(); 
    }); 
    console.log(queries); 
+2

Możesz usunąć + i dekodowanieURIComponent po drodze ... I użyj window.location.search zamiast tego – mplungjan

+0

Handy! Zauważ, że jeśli chcesz obsłużyć puste/puste elementy zapytania, powinieneś dodać blok 'if (i [0] .length> 0) ...' ... – ericpeters0n

+3

Ponadto, nie mogę uwierzyć, że to wymagane 5 linie javascript do zrobienia. W którym roku? – ericpeters0n

2

Robimy w ten sposób ...

String.prototype.getValueByKey = function (k) { 
    var p = new RegExp('\\b' + k + '\\b', 'gi'); 
    return this.search(p) != -1 ? decodeURIComponent(this.substr(this.search(p) + k.length + 1).substr(0, this.substr(this.search(p) + k.length + 1).search(/(&|;|$)/))) : ""; 
}; 
+5

Nie sądzę, że ludzie będą kojarzyli obiekt typu string z wartościami łańcucha zapytania. – Phil

133
+8

Czy to jest przenośne? – Cheezmeister

+3

To nie zwraca ciągu wyszukiwania z ciągu url. Zwraca ona tylko bieżącą wartość ciągu wyszukiwania bieżącej strony na pasku adresu. – Dwight

+0

@Cheezmeister: 'location.search' działa w przeglądarce Chrome, Firefox i IE10 +. Może pracować w IE9 i jeszcze niżej, ale nie mam go pod ręką. Dwight: window.location.search zwraca ciąg zapytania. Wypróbuj na tej stronie (http://stackoverflow.com/questions/4656843/jquery-get-querystring-from-url?a=b&c=d#e=f) w konsoli i zobaczysz '? a = b & c = d'. –