Я видел много примеров jQuery, где размер и имя параметра неизвестны. У моего url будет только одна строка:
http://example.com?sent=yes
Я просто хочу обнаружить:
sent
?Лучшее решение здесь.
var getUrlParameter = function getUrlParameter(sParam) {
var sPageURL = decodeURIComponent(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 : sParameterName[1];
}
}
};
И вот как вы можете использовать эту функцию, предполагая, что URL-адрес, http://dummy.com/?technology=jquery&blog=jquerybyexample
.
var tech = getUrlParameter('technology');
var blog = getUrlParameter('blog');
фрагмент кода jQuery, чтобы получить динамические переменные, хранящиеся в URL-адресе, в качестве параметров и сохранить их как переменные JavaScript, готовые для использования с вашими сценариями:
$.urlParam = function(name){
var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href);
if (results==null){
return null;
}
else{
return decodeURI(results[1]) || 0;
}
}
example.com?param1=name¶m2=&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
return results[1] || 0;
должно быть return decodeURI(results[1]) || 0;
Я всегда придерживаюсь этого как одна строка. Теперь параметры имеют vars:
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"
});
UPDATE
Требуется плагин url: plugins.jquery.com/url
Спасибо -Ripounet
Решение от 2017
У нас есть: http://example.com?sent=yes
let searchParams = new URLSearchParams(window.location.search)
Отправлено
searchParams.has('sent') // true
Является ли равным "да"?
let param = searchParams.get('sent')
а затем просто сравните его.
Или вы можете использовать эту опрятную небольшую функцию, потому что почему слишком сложные решения?
function getQueryParam(param) {
location.search.substr(1)
.split("&")
.some(function(item) { // returns first occurence and stops
return item.split("=")[0] == param && (param = item.split("=")[1])
})
return param
}
который выглядит еще лучше при упрощении и onelined:
var queryDict = {};
location.search.substr(1).split("&").forEach(function(item) {queryDict[item.split("=")[0]] = item.split("=")[1]})
result: queryDict['sent'] // undefined or 'value'
Вам лучше увидеть этот ответ: Как получить значения строки запроса в JavaScript?
Пик пик
"?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"
Еще одна альтернативная функция...
function param(name) {
return (location.search.split(name + '=')[1] || '').split('&')[0];
}
Возможно, вы захотите дать 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 всех найденных параметров. Он также настраивается для работы с разделителями и всеми.
Minified version < 1kb
Это просто и работает для меня
$.urlParam = function(name){
var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href);
return results[1] || 0;
}
так что если ваш url http://www.yoursite.com?city=4
попробуйте это
console.log($.urlParam('city'));
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;
}
Это может быть чрезмерным, но есть довольно популярная библиотека, доступная для разбора URI, называемая 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>
Там эта великолепная библиотека: 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, тогда синтаксис будет немного другим.
Существует еще один пример использования библиотеки URI.js.
Пример отвечает на вопросы точно так, как было задано.
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>
Так просто, вы можете использовать любой 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).
Это основано на ответе 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;
}
Это даст вам хороший объект для работы с
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') { .....
Надеюсь, это поможет.
<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>
По общему признанию, я добавляю свой ответ на вопрос с ответами, но это имеет следующие преимущества:
- не зависит от каких-либо внешних библиотек, включая jQuery
- Не загрязняющее пространство имен глобальных функций, расширяя 'String'
- Не создавать глобальные данные и делать ненужную обработку после найденного соответствия
- Обработка проблем с кодировкой и принятие (предполагаемого) имени некодированного параметра
- избегать явных for
циклов
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;
};
Затем вы будете использовать его как:
var paramVal = "paramName".urlParamValue() // null if no match
Что делать, если есть и в параметре URL, например filename = "p & g.html" & uid = 66
В этом случае первая функция будет работать неправильно. Поэтому я изменил код
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]);
}
}
}
С ванильным JavaScript вы можете легко взять params (location.search), получить подстроку (без?) и превратить ее в массив, разделив ее на "&".
Как вы итерации через urlParams, вы можете снова разбить строку с помощью "=" и добавить ее к объекту "params" в качестве объекта [elmement [0]] = element [1]. Супер простой и легкий доступ.
http://www.website.com/?error=userError&type=handwritten
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'];
Я использую это, и он работает. 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"];
Небольшое улучшение ответа Sameer, параметры кэша в закрытие, чтобы избежать разбора и циклирования всех параметров при каждом вызове
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];
}
})();
Вариант ответа 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++
Другое решение, использующее jQuery и JSON, поэтому вы можете получить доступ к значениям параметров через объект.
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);
}
Предполагая, что ваш URL http://example.com/?search=hello+world&language=en&page=3
После этого это только вопрос использования таких параметров:
param.language
для возврата
en
Самое полезное использование этого - запустить его при загрузке страницы и использовать глобальную переменную для использования параметров в любом месте, где они вам могут понадобиться.
Если ваш параметр содержит числовые значения, просто проанализируйте значение.
parseInt(param.page)
Если параметров нет param
будет просто пустым объектом.
Получить параметр по ключу
var keysName = $_GET('keys');
function $_GET(param) {
var vars = {};
window.location.href.replace( location.hash, '' ).replace(
/[?&]+([^=&]+)=?([^&]*)?/gi, // regexp
function( m, key, value ) { // callback
vars[key] = value !== undefined ? value : '';
}
);
if ( param ) {
return vars[param] ? vars[param] : null;
}
return vars;
}
Получить параметр из строки:
Object.defineProperty(String.prototype, 'urlParam', {
value: function (param) {
"use strict";
var str = this.trim();
var regex = "[\?&]" + param + "=([^&#]*)";
var results = new RegExp(regex, "i").exec(str);
return (results !== null) ? results[1] : '';
}
});
для использования:
var src = 'http://your-url.com/?param=value'
console.log(src.urlParam(param)); // returns 'value'
var url_param = GetURLParameter('name');
function GetURLParameter(elem) {
var sPageURL = window.location.search.substring(1);
var sURLVariables = sPageURL.split('&');
for (var i = 0; i < sURLVariables.length; i++)
{
var sParameterName = sURLVariables[i].split('=');
if (sParameterName[0] == elem)
{
return decodeURIComponent(sParameterName[1]);
}
}
}
var RequestQuerystring;
(window.onpopstate = function () {
var match,
pl = /\+/g, // Regex for replacing addition symbol with a space
search = /([^&=]+)=?([^&]*)/g,
decode = function (s) { return decodeURIComponent(s.replace(pl, " ")); },
query = window.location.search.substring(1);
RequestQuerystring = {};
while (match = search.exec(query))
RequestQuerystring[decode(match[1])] = decode(match[2]);
})();
RequestQuerystring теперь является объектом со всеми параметрами
Просто хотел показать мои коды:
function (name) {
name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
results = regex.exec(location.search);
return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
}
используйте этот
$.urlParam = function(name) {
var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href);
return results[1] || 0;
}
$.urlParam = function(name) {
var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href);
return results[1] || 0;
}
Попробуйте эту рабочую демонстрацию http://jsfiddle.net/xy7cX/
API:
Это должно помочь :)
код
var url = "http://myurl.com?sent=yes"
var pieces = url.split("?");
alert(pieces[1] + " ===== " + $.inArray("sent=yes", pieces));