Υπάρχει ένας τρόπος ανάκτησης τιμών query string χωρίς plugin μέσω jQuery (ή χωρίς);
Εάν ναι, πώς; Εάν όχι, υπάρχει κάποιο πρόσθετο που να μπορεί να το κάνει;
Ενημέρωση: Σεπ-2018
Μπορείτε να χρησιμοποιήσετε το URLSearchParams το οποίο είναι απλό και έχει αξιοπρεπή (αλλά όχι πλήρη) υποστήριξη προγράμματος περιήγησης.
const urlParams = new URLSearchParams(window.location.search);
const myParam = urlParams.get('myParam');
Πρωτότυπο
Δεν χρειάζεστε το jQuery για το σκοπό αυτό. Μπορείτε να χρησιμοποιήσετε απλά κάποια καθαρή JavaScript:
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, ' '));
}
Χρήση:
// query string: ?foo=lorem&bar=&baz
var foo = getParameterByName('foo'); // "lorem"
var bar = getParameterByName('bar'); // "" (present with empty value)
var baz = getParameterByName('baz'); // "" (present with no value)
var qux = getParameterByName('qux'); // null (absent)
<br>,
Σημείωση: Εάν μια παράμετρος υπάρχει πολλές φορές (?foo=lorem&foo=ipsum
), θα λάβετε την πρώτη τιμή (lorem
). Δεν υπάρχει κάποιο πρότυπο σχετικά με αυτό και οι χρήσεις ποικίλλουν, δείτε για παράδειγμα αυτή την ερώτηση: Authoritative position of duplicate HTTP GET query keys.
ΣΗΜΕΙΩΣΗ: Η συνάρτηση είναι ευαίσθητη στην πεζότητα. Αν προτιμάτε όνομα παραμέτρου χωρίς ευαισθησία στη πεζότητα, προσθέστε τον τροποποιητή 'i' στο RegExp.
Αυτή είναι μια ενημέρωση με βάση τις νέες προδιαγραφές URLSearchParams specs για την επίτευξη του ίδιου αποτελέσματος πιο συνοπτικά. Βλέπε απάντηση με τίτλο "URLSearchParams" παρακάτω.
Ο Roshambo στο snipplr.com έχει ένα απλό σενάριο για να το πετύχετε αυτό που περιγράφεται στο Get URL Parameters with jQuery | Improved. Με το σενάριό του μπορείτε επίσης εύκολα να βγάλετε μόνο τις παραμέτρους που θέλετε.
Εδώ είναι η ουσία:
$.urlParam = function(name, url) {
if (!url) {
url = window.location.href;
}
var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(url);
if (!results) {
return undefined;
}
return results[1] || undefined;
}
Στη συνέχεια, απλά πάρτε τις παραμέτρους σας από τη συμβολοσειρά ερωτήματος.
Έτσι, αν η συμβολοσειρά URL/ερωτήματος ήταν xyz.com/index.html?lang=de
.
Απλά καλέστε var langval = $.urlParam('lang');
, και το έχετε.
Το UZBEKJON έχει επίσης μια εξαιρετική ανάρτηση στο blog σχετικά με αυτό, Get URL parameters & values with jQuery.
Εάν χρησιμοποιείτε jQuery, μπορείτε να χρησιμοποιήσετε μια βιβλιοθήκη, όπως η [jQuery BBQ: Back Button & Query Library][1].
...Η jQuery BBQ παρέχει μια πλήρη μέθοδο
.deparam()
, μαζί με τη διαχείριση της κατάστασης κατακερματισμού και τις βοηθητικές μεθόδους ανάλυσης και συγχώνευσης θραυσμάτων / συμβολοσειρών ερωτημάτων.
Επεξεργασία: Προσθήκη παραδείγματος Deparam: