Czy ktoś zna dobry sposób na napisanie rozszerzenia jQuery do obsługi parametrów ciągu zapytania? Zasadniczo chcę rozszerzyć magiczną ($)
funkcję jQuery, aby móc zrobić coś takiego:
$('?search').val();
Co dałoby mi „test” wartość w następującym adresem: http://www.example.com/index.php?search=test
.
Widziałem wiele funkcji, które potrafią to zrobić w jQuery i Javascript, ale tak naprawdę chcę rozszerzyć jQuery, aby działało dokładnie tak, jak pokazano powyżej. Nie szukam wtyczki jQuery, szukam rozszerzenia do metody jQuery.
javascript
jquery
url
jquery-plugins
query-string
TroySteven
źródło
źródło
$
wystarczająco przeciążony?Odpowiedzi:
Po latach brzydkiego analizowania ciągów znaków jest lepszy sposób: URLSearchParams Przyjrzyjmy się, jak możemy użyć tego nowego interfejsu API do pobierania wartości z lokalizacji!
UPDATE: IE nie jest obsługiwany
użyj tej funkcji z odpowiedzi poniżej zamiast URLSearchParams
źródło
Po co rozszerzać jQuery? Jaka byłaby korzyść z rozszerzenia jQuery w porównaniu z posiadaniem funkcji globalnej?
http://jsfiddle.net/gilly3/sgxcL/
Alternatywnym podejściem byłoby przeanalizowanie całego ciągu zapytania i zapisanie wartości w obiekcie do późniejszego wykorzystania. To podejście nie wymaga wyrażenia regularnego i rozszerza
window.location
obiekt (ale równie łatwo można by użyć zmiennej globalnej):http://jsfiddle.net/gilly3/YnCeu/
Ta wersja korzysta również z
Array.forEach()
, która jest natywnie niedostępna w IE7 i IE8. Można go dodać za pomocą implementacji w MDN lub$.each()
zamiast tego można użyć jQuery .źródło
name=value
pary, oddzielone znakiem&
. Jeśli twój kod używa niestandardowego formatu kwerend, oczywiście, będziesz musiał napisać niestandardowy parser kwerendy wszędzie tam, gdzie kwerenda jest używana, czy to na serwerze, czy na kliencie.GET
jest kodowane jakoapplication/x-www-form-urlencoded
, z wartościami oddzielonymi&
. Mój kod obsługuje ten standard. Niestandardowe struktury adresów URL, takie jak ta, którą łączysz, będą wymagały niestandardowego parsera po stronie serwera i klienta. Niezależnie od tego, dodanie takiej możliwości do mojego kodu powyżej byłoby trywialne.Wtyczka JQuery jQuery-URL-Parser wykonuje to samo zadanie, na przykład w celu pobrania wartości parametru ciągu zapytania wyszukiwania , możesz użyćTa biblioteka nie jest aktywnie zarządzana. Jak sugeruje autor tej samej wtyczki, można użyć URI.js .
Możesz też zamiast tego użyć js-url . Jest dość podobny do tego poniżej.
Możesz więc uzyskać dostęp do parametrów zapytania, takich jak
$.url('?search')
źródło
file://
protokołem spowoduje, że znacznie więcej rzeczy nie będzie działać. Możesz stworzyć bardzo szybki i łatwy statyczny serwer HTML za pomocą node.js. stackoverflow.com/questions/16333790/…Znalazłem ten klejnot od naszych przyjaciół w SitePoint. https://www.sitepoint.com/url-parameters-jquery/ .
Korzystanie z PURE jQuery. Właśnie tego użyłem i zadziałało. Trochę to poprawiłem, na przykład sake.
Używaj, jak chcesz.
źródło
results[1] || 0
musisz zrobić, jeśli (wyniki) {return results [1]} return 0; Parametry zapytania bcoz mogą w ogóle nie występować. Modyfikacja obejmie wszystkie ogólne przypadki.https://example.com/?c=Order+ID
? Ten znak plus nadal pozostaje na tej funkcji.To nie jest mój przykładowy kod, ale używałem go w przeszłości.
źródło
Napisałem małą funkcję, w której wystarczy przeanalizować nazwę parametru zapytania. Więc jeśli masz:? Project = 12 & Mode = 200 & date = 2013-05-27 i chcesz parametr `` Mode '', musisz tylko przeanalizować nazwę `` Mode '' w funkcji:
źródło
Opierając się na powyższej odpowiedzi @Rob Neild, oto czysta adaptacja JS, która zwraca prosty obiekt zdekodowanych parametrów ciągu zapytania (bez% 20 itd.).
źródło
""
. I dostajesz {"": "undefined"}Napisane w Vanilla Javascript
źródło
Używam tego.
źródło