Я видел много примеров jQuery, где размер и имя параметра неизвестны. В моем url будет только 1 строка:
http://example.com?sent=yes
Я просто хочу определить:
Лучшее решение здесь.
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]);
}
}
};
А вот как вы можете использовать эту функцию, предполагая, что URL имеет вид,
http://dummy.com/?technology=jquery&blog=jquerybyexample
.
var tech = getUrlParameter('technology');
var blog = getUrlParameter('blog');
Решение от 2019 <!- удаление «the» помогает читабельности. -- >
У нас есть: http://example.com?отправлено = да
let searchParams = new URLSearchParams(window.location.search)
searchParams.has('sent') // true
Это равно "да"?
let param = searchParams.get('sent')
а потом просто сравните это.
jQuery code snippet, чтобы получить динамические переменные, хранящиеся в URL, в качестве параметров и сохранить их в виде переменных JavaScript, готовых для использования с вашими сценариями:
$.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 = имя и amp; amp; param2 = & id = 6
$.urlParam('param1'); // name
$.urlParam('id'); // 6
$.urlParam('param2'); // null
пример парамов с пробелами
http://www.jquery4u.com?city=Gold Coast
console.log($.urlParam('city'));
//output: Gold%20Coast
console.log(decodeURIComponent($.urlParam('city')));
//output: Gold Coast
Я всегда придерживаюсь этого как одной строки. Теперь у парамов есть вары
params={};location.search.replace(/[?&]+([^=&]+)=([^&]*)/gi,function(s,k,v){params[k]=v})
многослойный:
var params={};
window.location.search
.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(str,key,value) {
params[key] = value;
}
);
как функция
function getSearchParams(k){
var p={};
location.search.replace(/[?&]+([^=&]+)=([^&]*)/gi,function(s,k,v){p[k]=v})
return k?p[k]:p;
}
который вы могли бы использовать как:
getSearchParams() //returns {key1:val1, key2:val2}
или
getSearchParams("key1") //returns val1
Может быть, уже слишком поздно. Но этот метод очень прост и прост
<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"
});
ОБНОВЛЕНИЕ < br / > Требуется плагин url: plugins.jquery.com/url < br / > Спасибо -Ripounet
Или вы можете использовать эту аккуратную маленькую функцию, потому что why слишком сложные решения?
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
}
который выглядит еще лучше, когда упрощен и неэлинен:
var queryDict = {};
location.search.substr(1).split("&").forEach(function(item) {queryDict[item.split("=")[0]] = item.split("=")[1]})
& Лт; pre > результат: queryDict ['sent'] // неопределенный или 'значение' & Лт; / pre >
Вам лучше увидеть этот ответ: Как я могу получить значения строк запроса в JavaScript?
Sneak peak
"?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"
Использование URLSearchParams
:
var params = new window.URLSearchParams(window.location.search);
console.log(params.get('name'));
Будьте осторожны с совместимостью (в основном это нормально, но IE и Edge могут быть разные истории, проверьте это на наличие совместимой ссылки: https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams)
Возможно, вы захотите взглянуть на Dentist JS? (отказ от ответственности: я написал код)
код:
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"
с Dentist JS вы можете в основном вызывать функцию extract () на всех строках (например,., document.URL.extract ()) и вы получите HashMap из всех найденных параметров. Это также настраивается, чтобы иметь дело с разделителями и все.
Минифицированная версия < 1kb
Этот прост и работает для меня
$.urlParam = function(name){
var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href);
return results[1] || 0;
}
так что если ваш URL http://www.yoursite.com?город = 4
попробуй это
console.log($.urlParam('city'));
Надеюсь, это поможет.
<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>
& Лт;!- начать фрагмент: js hide: ложная консоль: истинная павиана: false - >
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;
}
& Лт;!- конец фрагмента - >
Попробуйте эту рабочую демонстрацию
API:
inArray
: http://api.jquery.com/jQuery.inArray/Это должно помочь :)
код
var url = "http://myurl.com?sent=yes"
var pieces = url.split("?");
alert(pieces[1] + " ===== " + $.inArray("sent=yes", pieces));
Так просто, что вы можете использовать любой URL и получить ценность
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: ?first=value1&second=&value2
var foo = getParameterByName('first'); // "value1"
var bar = getParameterByName('second'); // "value2"
Примечание. Если параметр присутствует несколько раз (?first = value1 & second = value2), вы получите первое значение (значение1) и второе значение как (значение2).
Это может быть излишним, но теперь существует довольно популярная библиотека для анализа URI, которая называется URI.js.
& Лт;!- начать фрагмент: js скрыть: false - >
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>
& Лт;!- конец фрагмента - >
Там есть эта замечательная библиотека https://github.com/allmarkedup/purl
что позволяет вам делать просто
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
// ...
}
}
Пример предполагает, что вы используете jQuery. Вы также можете использовать его как обычный javascript, тогда синтаксис будет немного другим.
http://example.com?sent=yes
Лучшее решение здесь.
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, ' '));
};
С помощью функции выше вы можете получить индивидуальные значения параметров:
getUrlParameter('sent');
Это даст вам хороший объект для работы
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;
}
А потом;
if (queryParameters().sent === 'yes') { .....
Это основано на ответе Gazoris, но URL-адрес декодирует параметры, чтобы их можно было использовать, когда они содержат данные, отличные от цифр и букв:
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;
}
Есть еще один пример использования библиотеки URI.js.
Пример отвечает на вопросы в точности так, как задано.
& Лт;!- начать фрагмент: js hide: ложная консоль: истинная павиана: false - >
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>
& Лт;!- конец фрагмента - >