Tôi đã thấy rất nhiều ví dụ về jQuery mà kích thước tham số và tên không xác định.
URL của tôi sẽ chỉ có 1 chuỗi:
http://example.com?sent=yes
Tôi chỉ muốn phát hiện:
- Có
sent
tồn tại? - Có bằng "có" không?
Tôi đã thấy rất nhiều ví dụ về jQuery mà kích thước tham số và tên không xác định.
URL của tôi sẽ chỉ có 1 chuỗi:
http://example.com?sent=yes
Tôi chỉ muốn phát hiện:
sent
tồn tại?Câu trả lời:
Giải pháp tốt nhất tại đây .
var getUrlParameter = function getUrlParameter(sParam) {
var sPageURL = window.location.search.substring(1),
sURLVariables = sPageURL.split('&'),
sParameterName,
i;
for (i = 0; i < sURLVariables.length; i++) {
sParameterName = sURLVariables[i].split('=');
if (sParameterName[0] === sParam) {
return sParameterName[1] === undefined ? true : decodeURIComponent(sParameterName[1]);
}
}
};
Và đây là cách bạn có thể sử dụng chức năng này với giả sử URL là
http://dummy.com/?technology=jquery&blog=jquerybyexample
.
var tech = getUrlParameter('technology');
var blog = getUrlParameter('blog');
false
hoặc null
cho tìm kiếm trống
&
hoặc =
trong một giá trị tham số.
Giải pháp từ năm 2020
Chúng tôi có: http://example.com?sent=yes
let searchParams = new URLSearchParams(window.location.search)
Có gửi tồn tại ?
searchParams.has('sent') // true
Có bằng "có" không?
let param = searchParams.get('sent')
và sau đó chỉ cần so sánh nó.
if ('URLSearchParams' in window) { // Browser supports URLSearchParams}
Xem tại đây
Đoạn mã jQuery để lấy các biến động được lưu trữ trong url dưới dạng tham số và lưu trữ chúng dưới dạng các biến JavaScript sẵn sàng để sử dụng với các tập lệnh của bạn:
$.urlParam = function(name){
var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href);
if (results==null) {
return null;
}
return decodeURI(results[1]) || 0;
}
example.com?param1=name¶m2=&id=6
$.urlParam('param1'); // name
$.urlParam('id'); // 6
$.urlParam('param2'); // null
ví dụ params với dấu cách
http://www.jquery4u.com?city=Gold Coast
console.log($.urlParam('city'));
//output: Gold%20Coast
console.log(decodeURIComponent($.urlParam('city')));
//output: Gold Coast
return results[1] || 0;
phải như vậyreturn decodeURI(results[1]) || 0;
|| 0
một phần vì đã có kiểm tra kết quả, phải chăng nó luôn trả về mảng khớp?
Tôi luôn luôn dán nó như là một dòng. Bây giờ params có các vars:
params={};location.search.replace(/[?&]+([^=&]+)=([^&]*)/gi,function(s,k,v){params[k]=v})
đa tuyến:
var params={};
window.location.search
.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(str,key,value) {
params[key] = value;
}
);
như một chức năng
function getSearchParams(k){
var p={};
location.search.replace(/[?&]+([^=&]+)=([^&]*)/gi,function(s,k,v){p[k]=v})
return k?p[k]:p;
}
mà bạn có thể sử dụng như:
getSearchParams() //returns {key1:val1, key2:val2}
hoặc là
getSearchParams("key1") //returns val1
replace(/[?&;]+([^=]+)=([^&;]*)/gi
để điều chỉnh lại ";" nhân vật như một dấu phân cách quá.
var params={};window.location.hash.replace(/[#&]+([^=&]+)=([^&]*)/gi,function(str,key,value){params[key] = value;});
Điều này hữu ích cho những thứ như AJAX trong đó hàm băm trong cửa sổ được cập nhật với ajax-request nhưng cũng là một người dùng đi đến một uri chứa một hàm băm.
Một chức năng thay thế khác ...
function param(name) {
return (location.search.split(name + '=')[1] || '').split('&')[0];
}
param('t') == param('sent') == 'yes'
trong ví dụ OP. Đây là một sửa chữa : return (location.search.split(new RegExp('[?&]' + name + '='))[1] || '').split('&')[0]
; Cũng lưu ý rằng bạn không thể biết nếu param tồn tại bởi vì bạn nhận được chuỗi rỗng cho các tham số bị thiếu.
return (location.search.split('?' + name + '=')[1] || location.search.split('&' + name + '=')[1] || '').split('&')[0];
Có thể là quá muộn. Nhưng phương pháp này rất dễ dàng và đơn giản
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="jquery.url.js"></script>
<!-- URL: www.example.com/correct/?message=done&year=1990 -->
<script type="text/javascript">
$(function(){
$.url.attr('protocol') // --> Protocol: "http"
$.url.attr('path') // --> host: "www.example.com"
$.url.attr('query') // --> path: "/correct/"
$.url.attr('message') // --> query: "done"
$.url.attr('year') // --> query: "1990"
});
CẬP NHẬT
Yêu cầu url plugin: plugins.jquery.com/url
Cảm ơn -Ripounet
Hoặc bạn có thể sử dụng chức năng nhỏ gọn này, bởi vì tại sao các giải pháp quá phức tạp?
function getQueryParam(param, defaultValue = undefined) {
location.search.substr(1)
.split("&")
.some(function(item) { // returns first occurence and stops
return item.split("=")[0] == param && (defaultValue = item.split("=")[1], true)
})
return defaultValue
}
trông thậm chí còn tốt hơn khi được đơn giản hóa và onelined:
var queryDict = {};
location.search.substr(1).split("&").forEach(function(item) {queryDict[item.split("=")[0]] = item.split("=")[1]})
kết quả: queryDict ['sent'] // không xác định hoặc 'value'
Bạn thấy rõ hơn câu trả lời này: Làm cách nào tôi có thể nhận các giá trị chuỗi truy vấn trong JavaScript?
Sneak đỉnh
"?a=1&b=2&c=3&d&e&a=5&a=t%20e%20x%20t&e=http%3A%2F%2Fw3schools.com%2Fmy%20test.asp%3Fname%3Dståle%26car%3Dsaab"
> queryDict
a: ["1", "5", "t e x t"]
b: ["2"]
c: ["3"]
d: [undefined]
e: [undefined, "http://w3schools.com/my test.asp?name=ståle&car=saab"]
> queryDict["a"][1] // "5"
> queryDict.a[1] // "5"
Sử dụng URLSearchParams
:
var params = new window.URLSearchParams(window.location.search);
console.log(params.get('name'));
Hãy cẩn thận về khả năng tương thích (Chủ yếu là tốt, nhưng IE và Edge, có thể là câu chuyện khác nhau, hãy kiểm tra điều này để tham khảo tương thích: https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams )
Điều này là đơn giản và làm việc cho tôi
$.urlParam = function(name){
var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href);
return results[1] || 0;
}
vì vậy nếu url của bạn là http://www.yoursite.com?city=4
thử cái này
console.log($.urlParam('city'));
Có lẽ bạn có thể muốn cung cấp cho Nha sĩ JS một cái nhìn? (từ chối trách nhiệm: Tôi đã viết mã)
mã:
document.URL == "http://helloworld.com/quotes?id=1337&author=kelvin&message=hello"
var currentURL = document.URL;
var params = currentURL.extract();
console.log(params.id); // 1337
console.log(params.author) // "kelvin"
console.log(params.message) // "hello"
với Nha sĩ JS, về cơ bản bạn có thể gọi hàm extract () trên tất cả các chuỗi (ví dụ: document.URL.extract ()) và bạn lấy lại HashMap của tất cả các tham số được tìm thấy. Nó cũng có thể tùy chỉnh để đối phó với các dấu phân cách và tất cả.
Phiên bản rút gọn <1kb
Hy vọng điều này có thể giúp cho bạn.
<script type="text/javascript">
function getParameters() {
var searchString = window.location.search.substring(1),
params = searchString.split("&"),
hash = {};
if (searchString == "") return {};
for (var i = 0; i < params.length; i++) {
var val = params[i].split("=");
hash[unescape(val[0])] = unescape(val[1]);
}
return hash;
}
$(window).load(function() {
var param = getParameters();
if (typeof param.sent !== "undefined") {
// Do something.
}
});
</script>
function GetRequestParam(param)
{
var res = null;
try{
var qs = decodeURIComponent(window.location.search.substring(1));//get everything after then '?' in URI
var ar = qs.split('&');
$.each(ar, function(a, b){
var kv = b.split('=');
if(param === kv[0]){
res = kv[1];
return false;//break loop
}
});
}catch(e){}
return res;
}
Hãy thử bản demo hoạt động này http://jsfiddle.net/xy7cX/
API:
Điều này sẽ giúp :)
mã
var url = "http://myurl.com?sent=yes"
var pieces = url.split("?");
alert(pieces[1] + " ===== " + $.inArray("sent=yes", pieces));
Có thư viện tuyệt vời này: https://github.com/allmarkedup/purl
cho phép bạn làm đơn giản
url = 'http://example.com?sent=yes';
sent = $.url(url).param('sent');
if (typeof sent != 'undefined') { // sent exists
if (sent == 'yes') { // sent is equal to yes
// ...
}
}
Ví dụ giả sử bạn đang sử dụng jQuery. Bạn cũng có thể sử dụng nó như javascript đơn giản, cú pháp sau đó sẽ khác một chút.
Đây có thể là quá mức cần thiết, nhưng có một thư viện khá phổ biến bây giờ đã có cho URI phân tích cú pháp, được gọi là URI.js .
var uri = "http://example.org/foo.html?technology=jquery&technology=css&blog=stackoverflow";
var components = URI.parse(uri);
var query = URI.parseQuery(components['query']);
document.getElementById("result").innerHTML = "URI = " + uri;
document.getElementById("result").innerHTML += "<br>technology = " + query['technology'];
// If you look in your console, you will see that this library generates a JS array for multi-valued queries!
console.log(query['technology']);
console.log(query['blog']);
<script src="https://cdnjs.cloudflare.com/ajax/libs/URI.js/1.17.0/URI.min.js"></script>
<span id="result"></span>
Rất đơn giản, bạn có thể sử dụng bất kỳ url và nhận giá trị
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, " "));
}
Ví dụ sử dụng
// query string: ?first=value1&second=&value2
var foo = getParameterByName('first'); // "value1"
var bar = getParameterByName('second'); // "value2"
Lưu ý: Nếu một tham số có mặt nhiều lần (? First = value1 & second = value2), bạn sẽ nhận được giá trị đầu tiên (value1) và giá trị thứ hai là (value2).
Điều này sẽ cung cấp cho bạn một đối tượng tốt để làm việc với
function queryParameters () {
var result = {};
var params = window.location.search.split(/\?|\&/);
params.forEach( function(it) {
if (it) {
var param = it.split("=");
result[param[0]] = param[1];
}
});
return result;
}
Và sau đó;
if (queryParameters().sent === 'yes') { .....
Điều này dựa trên câu trả lời của Gazoris , nhưng URL giải mã các tham số để chúng có thể được sử dụng khi chúng chứa dữ liệu không phải là số và chữ cái:
function urlParam(name){
var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href);
// Need to decode the URL parameters, including putting in a fix for the plus sign
// https://stackoverflow.com/a/24417399
return results ? decodeURIComponent(results[1].replace(/\+/g, '%20')) : null;
}
Có một ví dụ khác với việc sử dụng thư viện URI.js.
Ví dụ trả lời các câu hỏi chính xác như đã hỏi.
var url = 'http://example.com?sent=yes';
var urlParams = new URI(url).search(true);
// 1. Does sent exist?
var sendExists = urlParams.sent !== undefined;
// 2. Is it equal to "yes"?
var sendIsEqualtToYes = urlParams.sent == 'yes';
// output results in readable form
// not required for production
if (sendExists) {
console.log('Url has "sent" param, its value is "' + urlParams.sent + '"');
if (urlParams.sent == 'yes') {
console.log('"Sent" param is equal to "yes"');
} else {
console.log('"Sent" param is not equal to "yes"');
}
} else {
console.log('Url hasn\'t "sent" param');
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/URI.js/1.18.2/URI.min.js"></script>
http://example.com?sent=yes
Giải pháp tốt nhất tại đây .
function getUrlParameter(name) {
name = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]');
var regex = new RegExp('[\\?&]' + name + '=([^&#]*)');
var results = regex.exec(location.href);
return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, ' '));
};
Với chức năng trên, bạn có thể nhận các giá trị tham số riêng lẻ:
getUrlParameter('sent');
Phiên bản Coffeescript của câu trả lời của Sameer
getUrlParameter = (sParam) ->
sPageURL = window.location.search.substring(1)
sURLVariables = sPageURL.split('&')
i = 0
while i < sURLVariables.length
sParameterName = sURLVariables[i].split('=')
if sParameterName[0] == sParam
return sParameterName[1]
i++
Một cải tiến nhỏ cho câu trả lời của Sameer, tham số bộ đệm vào trạng thái đóng để tránh phân tích cú pháp và lặp qua tất cả các tham số mỗi lần gọi
var getURLParam = (function() {
var paramStr = decodeURIComponent(window.location.search).substring(1);
var paramSegs = paramStr.split('&');
var params = [];
for(var i = 0; i < paramSegs.length; i++) {
var paramSeg = paramSegs[i].split('=');
params[paramSeg[0]] = paramSeg[1];
}
console.log(params);
return function(key) {
return params[key];
}
})();
Tôi sử dụng nó và nó hoạt động. http://codesheet.org/codesheet/NF246Tzs
function getUrlVars() {
var vars = {};
var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) {
vars[key] = value;
});
return vars;
}
var first = getUrlVars()["id"];
Với JavaScript vanilla, bạn có thể dễ dàng lấy tham số (location.search), lấy chuỗi con (không có?) Và biến nó thành một mảng, bằng cách chia nó bằng '&'.
Khi bạn lặp lại qua urlParams, sau đó bạn có thể phân tách chuỗi một lần nữa với '=' và thêm nó vào đối tượng 'params' làm đối tượng [elmement [0]] = phần tử [1]. Siêu đơn giản và dễ dàng để truy cập.
http://www.website.com/?error=userError&type=handwrwr
var urlParams = location.search.substring(1).split('&'),
params = {};
urlParams.forEach(function(el){
var tmpArr = el.split('=');
params[tmpArr[0]] = tmpArr[1];
});
var error = params['error'];
var type = params['type'];
Điều gì xảy ra nếu có & trong tham số URL như filename = "p & g.html" & uid = 66
Trong trường hợp này, chức năng 1 sẽ không hoạt động đúng. Vì vậy, tôi đã sửa đổi mã
function getUrlParameter(sParam) {
var sURLVariables = window.location.search.substring(1).split('&'), sParameterName, i;
for (i = 0; i < sURLVariables.length; i++) {
sParameterName = sURLVariables[i].split('=');
if (sParameterName[0] === sParam) {
return sParameterName[1] === undefined ? true : decodeURIComponent(sParameterName[1]);
}
}
}
Phải thừa nhận rằng tôi đang thêm câu trả lời của mình cho một câu hỏi được trả lời quá mức, nhưng điều này có những ưu điểm của:
- Không phụ thuộc vào bất kỳ thư viện bên ngoài nào, kể cả jQuery
- Không gây ô nhiễm không gian tên hàm toàn cầu, bằng cách mở rộng 'Chuỗi'
- Không tạo bất kỳ dữ liệu toàn cầu nào và thực hiện xử lý không cần thiết sau khi tìm thấy kết quả khớp
- Xử lý các vấn đề mã hóa và chấp nhận (giả sử) tên tham số không được mã hóa
- Tránh for
các vòng lặp rõ ràng
String.prototype.urlParamValue = function() {
var desiredVal = null;
var paramName = this.valueOf();
window.location.search.substring(1).split('&').some(function(currentValue, _, _) {
var nameVal = currentValue.split('=');
if ( decodeURIComponent(nameVal[0]) === paramName ) {
desiredVal = decodeURIComponent(nameVal[1]);
return true;
}
return false;
});
return desiredVal;
};
Sau đó, bạn sẽ sử dụng nó như:
var paramVal = "paramName".urlParamValue() // null if no match
Nếu bạn muốn tìm một tham số cụ thể từ một url cụ thể:
function findParam(url, param){
var check = "" + param;
if(url.search(check )>=0){
return url.substring(url.search(check )).split('&')[0].split('=')[1];
}
}
var url = "http://www.yourdomain.com/example?id=1&order_no=114&invoice_no=254";
alert(findParam(url,"order_no"));
Một giải pháp khác sử dụng jQuery và JSON, vì vậy bạn có thể truy cập các giá trị tham số thông qua một đối tượng.
var loc = window.location.href;
var param = {};
if(loc.indexOf('?') > -1)
{
var params = loc.substr(loc.indexOf('?')+1, loc.length).split("&");
var stringJson = "{";
for(var i=0;i<params.length;i++)
{
var propVal = params[i].split("=");
var paramName = propVal[0];
var value = propVal[1];
stringJson += "\""+paramName+"\": \""+value+"\"";
if(i != params.length-1) stringJson += ",";
}
stringJson += "}";
// parse string with jQuery parseJSON
param = $.parseJSON(stringJson);
}
Giả sử URL của bạn là http://example.com/?search=hello+world&language=en&page=3
Sau đó, vấn đề chỉ là sử dụng các tham số như thế này:
param.language
trở về
en
Cách sử dụng hữu ích nhất của việc này là chạy nó khi tải trang và sử dụng biến toàn cục để sử dụng các tham số bất cứ nơi nào bạn có thể cần chúng.
Nếu tham số của bạn chứa các giá trị số thì chỉ cần phân tích giá trị.
parseInt(param.page)
Nếu không có tham số param
sẽ chỉ là một đối tượng trống.
$.urlParam = function(name) {
var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href);
return results[1] || 0;
}