Недавно я выполнил часть своего кода JavaScript через JSLint Крокфорда, и он выдал следующую ошибку: & # xD ; & # xA ; Проблема в строке 1, символ 1: отсутствует & quot ;, используется строгое выражение & quot ;. & # xD ; & # xA ; Выполняя поиск, я снова …

У меня есть URL с некоторыми параметрами GET следующим образом:

www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5 

ES2015, 1-liner, который хорошо сцепляется с c. Я пытался прочитать URL, но получил только m2 Так в чем же разница между функциональной областью и областью блока?

JavaScript сам не имеет встроенной функции для обработки параметров строки запроса.

Код, запущенный в (современном) браузере, вы можете использовать URL объект (который является частью API, предоставляемого браузерами для JS):

var url_string = "http://www.example.com/t.html?a=1&b=3&c=m2-m3-m4-m5"; //window.location.href
var url = new URL(url_string);
var c = url.searchParams.get("c");
console.log(c);

Для более старых браузеров (включая Internet Explorer) вы можете использовать сервис этот полифилл или код из исходной версии этого ответа, предшествующий URL:

Вы можете получить доступ к location.search, что даст вам из ? в конце URL или в начале идентификатора фрагмента (# foo), в зависимости от того, что произойдет раньше.

Тогда вы можете разобрать это с помощью этого:

function parse_query_string(query) {
  var vars = query.split("&");
  var query_string = {};
  for (var i = 0; i < vars.length; i  ) {
    var pair = vars[i].split("=");
    var key = decodeURIComponent(pair[0]);
    var value = decodeURIComponent(pair[1]);
    // If first entry with this name
    if (typeof query_string[key] === "undefined") {
      query_string[key] = decodeURIComponent(value);
      // If second entry with this name
    } else if (typeof query_string[key] === "string") {
      var arr = [query_string[key], decodeURIComponent(value)];
      query_string[key] = arr;
      // If third or later entry with this name
    } else {
      query_string[key].push(decodeURIComponent(value));
    }
  }
  return query_string;
}

var query_string = "a=1&b=3&c=m2-m3-m4-m5";
var parsed_qs = parse_query_string(query_string);
console.log(parsed_qs.c);

Вы можете получить строку запроса из URL-адреса текущей страницы с помощью:

var query = window.location.search.substring(1);
var qs = parse_query_string(query);

Большинство реализаций, которые я видел, пропускают URL-декодирование имен и значений.

После того, как этот оператор выполнится, страница снова пройдет проверку источника с

function getQueryParams(qs) {
    qs = qs.split(' ').join(' ');

    var params = {},
        tokens,
        re = /[?&]?([^=] )=([^&]*)/g;

    while (tokens = re.exec(qs)) {
        params[decodeURIComponent(tokens[1])] = decodeURIComponent(tokens[2]);
    }

    return params;
}

//var query = getQueryParams(document.location.search);
//alert(query.foo);

source

function gup( name, url ) {
    if (!url) url = location.href;
    name = name.replace(/[[]/,"\[").replace(/[]]/,"\]");
    var regexS = "[\?&]" name "=([^&#]*)";
    var regex = new RegExp( regexS );
    var results = regex.exec( url );
    return results == null ? null : results[1];
}
gup('q', 'hxxp://example.com/?q=abc')

Это простой способ проверить только один параметр:

Эта функция принимает обратный вызов (компаратор), который сравнивает строки и находит дубликаты, и второй обратный вызов (onDublicate), который агрегирует дубликаты.

    http://myserver/action?myParam=2

Пример Javascript:

    var myParam = location.search.split('myParam=')[1]

если в URL существует «myParam» … переменная myParam будет содержать «2», в противном случае она будет неопределенной.

оно должно быть

    var myParam = location.search.split('myParam=')[1] ? location.search.split('myParam=')[1] : 'myDefaultValue';

Обновление: Это работает лучше:

    var url = "http://www.example.com/index.php?myParam=384&login=admin"; // or window.location.href for current url
    var captured = /myParam=([^&] )/.exec(url)[1]; // Value is in [1] ('384' in our case)
    var result = captured ? captured : 'myDefaultValue';

И это работает правильно, даже если URL полон параметров.

Поставщики браузеров реализовали собственный способ сделать это через URL и URLSearchParams.

let url = new URL('http://www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5');
let searchParams = new URLSearchParams(url.search);
console.log(searchParams.get('c'));  // outputs "m2-m3-m4-m5"

В настоящее время поддерживается в Firefox, Opera, Safari, Chrome и Edge. Список поддержки браузера см. Здесь Глядя на вывод

https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams https://developer.mozilla.org/en-US/docs/Web/API/URL/URL

https://url.spec.whatwg.org/

Эрика Бидельмана, инженера из Google, рекомендует используя эту polyfill для неподдерживаемых браузеров.

Я нашел это давным-давно, очень легко:

function getUrlVars() {
    var vars = {};
    var parts = window.location.href.replace(/[?&] ([^=&] )=([^&]*)/gi,    
    function(m,key,value) {
      vars[key] = value;
    });
    return vars;
  }

Затем назовите это так:

var fType = getUrlVars()["type"];

Вы можете получить строку запроса в location.search, затем вы можете разделить все после знака вопроса:

var params = {};

if (location.search) {
    var parts = location.search.substring(1).split('&');

    for (var i = 0; i < parts.length; i  ) {
        var nv = parts[i].split('=');
        if (!nv[0]) continue;
        params[nv[0]] = nv[1] || true;
    }
}

// Now you can get the parameters you want like so:
var abc = params.abc;

Скажем, у вас есть объекты даты A и B, получите их значение времени EPOC, затем вычтите, чтобы получить разницу в миллисекундах.

var arr = document.URL.match(/room=([0-9] )/)
var room = arr[1];

Вот рекурсивное решение, которое не имеет регулярных выражений и имеет минимальную мутацию (мутирует только объект params, что, я считаю, неизбежно в JS).

Это здорово, потому что:

  • Является ли рекурсивный
  • будет точно указывать на разницу
  • full
  • Не прерывается, если ‘ = ‘находится в значении
  • выполняет декодирование URL
  • явно, потому что это хорошая практика

потому что это не итератор, и

var get_params = function(search_string) {

  var parse = function(params, pairs) {
    var pair = pairs[0];
    var parts = pair.split('=');
    var key = decodeURIComponent(parts[0]);
    var value = decodeURIComponent(parts.slice(1).join('='));

    // Handle multiple parameters of the same name
    if (typeof params[key] === "undefined") {
      params[key] = value;
    } else {
      params[key] = [].concat(params[key], value);
    }

    return pairs.length == 1 ? params : parse(params, pairs.slice(1))
  }

  // Get rid of leading ?
  return search_string.length == 0 ? {} : parse({}, search_string.substr(1).split('&'));
}

var params = get_params(location.search);

// Finally, to get the param you want
params['c'];

Посмотрите это

function getURLParameters(paramName)
{
    var sURL = window.document.URL.toString();
    if (sURL.indexOf("?") > 0)
    {
        var arrParams = sURL.split("?");
        var arrURLParams = arrParams[1].split("&");
        var arrParamNames = new Array(arrURLParams.length);
        var arrParamValues = new Array(arrURLParams.length);

        var i = 0;
        for (i = 0; i<arrURLParams.length; i  )
        {
            var sParam =  arrURLParams[i].split("=");
            arrParamNames[i] = sParam[0];
            if (sParam[1] != "")
                arrParamValues[i] = unescape(sParam[1]);
            else
                arrParamValues[i] = "No Value";
        }

        for (i=0; i<arrURLParams.length; i  )
        {
            if (arrParamNames[i] == paramName)
            {
                //alert("Parameter:"   arrParamValues[i]);
                return arrParamValues[i];
            }
        }
        return "No Parameters Found";
    }
}

супер простой способ использования URLSearchParams Глядя на вывод

function getParam(param){
  return new URLSearchParams(window.location.search).get(param);
}

В настоящее время поддерживается в нотациях Chrome, Firefox, Safari, Edge и Подчеркните Глядя на вывод

Я сделал функцию, которая делает это:

var getUrlParams = function (url) {
  var params = {};
  (url   '?').split('?')[1].split('&').forEach(function (pair) {
    pair = (pair   '=').split('=').map(decodeURIComponent);
    if (pair[0].length) {
      params[pair[0]] = pair[1];
    }
  });
  return params;
};

Обновление 26.05.2017, вот реализация ES7 (работает с предустановленным этапом babel 0, 1, 2 или 3):

const getUrlParams = url => `${url}?`.split('?')[1]
  .split('&').reduce((params, pair) =>
    ((key, val) => key ? {...params, [key]: val} : params)
    (...`${pair}=`.split('=').map(decodeURIComponent)), {});

Некоторые тесты:

console.log(getUrlParams('https://google.com/foo?a=1&b=2&c')); // Will log {a: '1', b: '2', c: ''}
console.log(getUrlParams('/foo?a=1&b=2&c')); // Will log {a: '1', b: '2', c: ''}
console.log(getUrlParams('?a=1&b=2&c')); // Will log {a: '1', b: '2', c: ''}
console.log(getUrlParams('https://google.com/')); // Will log {}
console.log(getUrlParams('a=1&b=2&c')); // Will log {}

Обновление от 3/03/2018, здесь приведена реализация Typescript:

const getUrlParams = (search: string) => `${search}?`
  .split('?')[1]
  .split('&')
  .reduce(
    (params: object, pair: string) => {
      const [key, value] = `${pair}=`
        .split('=')
        .map(decodeURIComponent)

      return key.length > 0 ? { ...params, [key]: value } : params
    },
    {}
  )

Обновление 13.02.2009, вот обновленная реализация TypeScript, которая работает с TypeScript 3.

interface IParams { [key: string]: string }

const paramReducer = (params: IParams, pair: string): IParams => {
  const [key, value] = `${pair}=`.split('=').map(decodeURIComponent)

  return key.length > 0 ? { ...params, [key]: value } : params
}

const getUrlParams = (search: string): IParams =>
  `${search}?`.split('?')[1].split('&').reduce<IParams>(paramReducer, {})

Решение ECMAScript 6:

var params = window.location.search
  .substring(1)
  .split("&")
  .map(v => v.split("="))
  .reduce((map, [key, value]) => map.set(key, decodeURIComponent(value)), new Map())

loop parseUri предоставляет кросс-браузерный способ работы с clipboard (

var uri = 'www.test.com/t.html&a=1&b=3&c=m2-m3-m4-m5';
var c = uri.queryKey['c'];
// c = 'm2-m3-m4-m5'

Я использую

function getVal(str) {
    var v = window.location.search.match(new RegExp('(?:[?&]' str '=)([^&] )'));
    return v ? v[1] : null;
}

, как вы, возможно, знаете, в javascript есть предложение этот вопрос означает, что переменная не была объявлена ​​или ей не было присвоено значение.

 function getUrlQueryParams(url) {
  var queryString = url.split("?")[1];
  var keyValuePairs = queryString.split("&");
  var keyValue = [];
  var queryParams = {};
  keyValuePairs.forEach(function(pair) {
    keyValue = pair.split("=");
    queryParams[keyValue[0]] = decodeURIComponent(keyValue[1]).replace(/ /g, " ");
});
  return queryParams;
}

Итак, вот несколько тестов сценария, которые вы можете увидеть:

// Query parameters with strings only, no special characters.
var currentParams = getUrlQueryParams("example.com/foo?number=zero");
alert(currentParams["number"]); // Gives "zero".

// For the URL you stated above...
var someParams = getUrlQueryParams("www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5 ");
alert(someParams["c"]); // Gives "m2-m3-m4-m5".

// For a query params with URI encoding...
var someParams = getUrlQueryParams("www.example.com/t.html?phrase=a long shot&location=Silicon Valley, USA");
alert(someParams["phrase"]); // Gives "a long shot".
alert(someParams["location"]); // Gives "Silicon Valley, USA".

вернет Значение отдельного параметра например, index.html? msg = 1 использует следующий код

$(window).load(function(){
    queryString();
});

function queryString()
{
    var queryString = window.location.search.substring(1);
    var varArray = queryString.split("="); //eg. index.html?msg=1

    var param1 = varArray[0];
    var param2 = varArray[1];

}

вернет Все параметры Значение использует следующий код,

$(window).load(function(){
    queryString();
});

function queryString()
{
    var queryString = window.location.search;
    var varArray = queryString.split("&");
    for (var i=0;i<varArray.length;i  ) {
      var param = varArray[i].split("=");
        //parameter-value pair
    }
} 

на этот вопрос слишком много ответов, поэтому я добавляю еще один.

/**
 * parses and returns URI query parameters 
 * 
 * @param {string} param parm
 * @param {bool?} asArray if true, returns an array instead of a scalar 
 * @returns {Object|Array} 
 */
function getURIParameter(param, asArray) {
    return document.location.search.substring(1).split('&').reduce(function(p,c) {
        var parts = c.split('=', 2).map(function(param) { return decodeURIComponent(param); });
        if(parts.length == 0 || parts[0] != param) return (p instanceof Array) && !asArray ? null : p;
        return asArray ? p.concat(parts.concat(true)[1]) : parts.concat(true)[1];
    }, []);
}

Использование:

getURIParameter("id")  // returns the last id or null if not present
getURIParameter("id", true) // returns an array of all ids

это справляется с пустыми параметрами (эти ключи присутствуют без "=value" DEMO

Вы можете использовать эту функцию, которую я скомпилировал вместе. напрямую, с или без jQuery. Подобный код выглядел бы так, полные документы

Чтобы получить значение параметра с именем foo :

new URI(('' document.location)).search(true).foo

мой предыдущий тест был не совсем верным.)

  1. Преобразование document.location в строку (это объект)
  2. Если грамматика не может интерпретировать строку как расширение
  3. Вызвать функцию search (), чтобы получить часть поиска (запроса) url
    также можно использовать для проверки типа устройства. Функция
  4. Получите доступ к свойству foo в полученном объекте, чтобы получить значение

Вот скрипка для этого цикла …. http : //jsfiddle.net/m6tett01/12/

Все современные браузеры поддерживают объект XMLHttpRequest. Объект XMLHttpRequest можно использовать для скрытого обмена данными с веб-сервером. Это означает, что можно обновить части веб-страницы, не перезагружая всю страницу.

<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"
});
</script>
// Read a page's GET URL variables and return them as an associative array.
function getUrlVars()
{
    var vars = [], hash;
    var hashes = window.location.href.slice(window.location.href.indexOf('?')   1).split('&');
    for(var i = 0; i < hashes.length; i  )
    {
        hash = hashes[i].split('=');
        vars.push(hash[0]);
        vars[hash[0]] = hash[1];
    }
    return vars;
}

// Usage for URL: http://my.site.com/location?locationId=53cc272c0364aefcb78756cd&shared=false
var id = getUrlVars()["locationId"];

Получено отсюда: http://jquery-howto.blogspot.ru/2009/09/get-url-parameters-values-with-jquery.html

Простой способ

function getParams(url){
        var regex = /[?&]([^=#] )=([^&#]*)/g,
            params = {},
            match;
        while(match = regex.exec(url)) {
            params[match[1]] = match[2];
        }
        return params;
    }

, затем вызовите его как getParams (url)

Еще одно предложение.

Уже есть несколько хороших ответов, но я нашел их излишне сложными и трудными для понимания. Это короткий, простой и возвращает простой ассоциативный массив с именами ключей в соответствии с именами токенов в URL.

Я добавил версию с комментариями ниже для тех, кто хочет учиться.

Обратите внимание, что для его цикла используется jQuery ($ .each), который я рекомендую вместо forEach. Я считаю, что проще обеспечить кросс-браузерную совместимость, используя jQuery по всем направлениям, вместо того, чтобы включать отдельные исправления для поддержки тех функций, которые не поддерживаются в старых браузерах.

Если вы хотите вызвать один контроллер в другой, доступно четыре метода

function getTokens(){
    var tokens = [];
    var query = location.search;
    query = query.slice(1);
    query = query.split('&');
    $.each(query, function(i,value){    
        var token = value.split('=');   
        var key = decodeURIComponent(token[0]);     
        var data = decodeURIComponent(token[1]);
        tokens[key] = data;
    });
    return tokens;
}

. Это включает использование

function getTokens(){
    var tokens = [];            // new array to hold result
    var query = location.search; // everything from the '?' onward 
    query = query.slice(1);     // remove the first character, which will be the '?' 
    query = query.split('&');   // split via each '&', leaving us an array of something=something strings

    // iterate through each something=something string
    $.each(query, function(i,value){    

        // split the something=something string via '=', creating an array containing the token name and data
        var token = value.split('=');   

        // assign the first array element (the token name) to the 'key' variable
        var key = decodeURIComponent(token[0]);     

        // assign the second array element (the token data) to the 'data' variable
        var data = decodeURIComponent(token[1]);

        tokens[key] = data;     // add an associative key/data pair to our result array, with key names being the URI token names
    });

    return tokens;  // return the array
}

Рекомендовать наиболее краткий и эффективный способ выяснить, содержит ли массив JavaScript объект.

http://www.example.com/page.htm?id=4&name=murray

Вы можете назначить токены URL своей переменной:

var tokens = getTokens();

также немного увеличит производительность больших массивов.

document.write( tokens['id'] );

. Я настроил скрипку, чтобы показать различное поведение.

. Вы также можете просто обратиться к имени токена из функции напрямую:

document.write( getTokens()['name'] );

… который напечатал бы «Мюррей».

// http:localhost:8080/path?param_1=a&param_2=b
var getParamsMap = function () {
    var params = window.location.search.split("&");
    var paramsMap = {};
    params.forEach(function (p) {
        var v = p.split("=");
        paramsMap[v[0]]=decodeURIComponent(v[1]);
    });
    return paramsMap;
};

// -----------------------

console.log(getParamsMap()["param_1"]);  // should log "a"     

JavaScript:

new URL(location.href).searchParams.get("my_key");

Существуют более сложные примеры, но они просты и дают согласованные результаты. Нет необходимости проверять неопределенность, так как она включена в проверку (value == null). Вы также можете имитировать C #, добавляя их в строку следующим образом: , могут справиться с этой ситуацией, используя (так как это обычный JS, а не ключевое слово

function tryDecodeURIComponent(value) {
  try {
    return decodeURIComponent(value);
  } catch (e) {
    // Ignore any invalid uri component
  }
}

function isDefined(value) {return typeof value !== 'undefined';}

function parseKeyValue(keyValue) {
  keyValue = keyValue.replace(/^?/, '');
  var obj = {}, key_value, key;
  var iter = (keyValue || "").split('&');
  for (var i=0; i<iter.length; i  ) {
    var kValue = iter[i];
    if (kValue) {
      key_value = kValue.replace(/ /g,' ').split('=');
      key = tryDecodeURIComponent(key_value[0]);
      if (isDefined(key)) {
        var val = isDefined(key_value[1]) ? tryDecodeURIComponent(key_value[1]) : true;
        if (!hasOwnProperty.call(obj, key)) {
          obj[key] = val;
        } else if (isArray(obj[key])) {
          obj[key].push(val);
        } else {
          obj[key] = [obj[key],val];
        }
      }
    }
  };
  return obj;
}

alert(JSON.stringify(parseKeyValue('?a=1&b=3&c=m2-m3-m4-m5')));

. Вы можете добавить эту функцию в window.location:

window.location.query = function query(arg){
  q = parseKeyValue(this.search);
  if (!isDefined(arg)) {
    return q;
  }      
  if (q.hasOwnProperty(arg)) {
    return q[arg];
  } else {
    return "";
  }
}

// assuming you have this url :
// http://www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5

console.log(window.location.query())

// Object {a: "1", b: "3", c: "m2-m3-m4-m5"}

console.log(window.location.query('c'))

// "m2-m3-m4-m5"

мне нужно было прочитать URL-переменную GET и выполните действие на основе параметра url. Я искал решение проблемы и наткнулся на этот маленький кусочек кода. Он в основном считывает URL текущей страницы, выполняет некоторое регулярное выражение для URL, затем сохраняет параметры URL в ассоциативном массиве, к которому мы можем легко получить доступ.

В качестве примера, если бы у нас был следующий URL с javascript внизу.

http://TestServer/Pages/NewsArchive.aspx?year=2013&Month=July

Все, что нам нужно сделать, чтобы получить идентификатор параметра и страницу, — это вызвать это: оператор

Код будет:

<script type="text/javascript">
var first = getUrlVars()["year"];
var second = getUrlVars()["Month"];

alert(first);
alert(second);
function getUrlVars() {
var vars = {};
var parts = window.location.href.replace(/[?&] ([^=&] )=([^&]*)/gi, function(m,key,value) {
vars[key] = value;
});
return vars;
}
</script>

Вот что я делаю:

var uriParams = getSearchParameters();
alert(uriParams.c);


// background functions:

// Get object/associative array of URL parameters
function getSearchParameters () {
  var prmstr = window.location.search.substr(1);
  return prmstr !== null && prmstr !== "" ? transformToAssocArray(prmstr) : {};
}

// convert parameters from url-style string to associative array
function transformToAssocArray (prmstr) {
  var params = {},
      prmarr = prmstr.split("&");

  for (var i = 0; i < prmarr.length; i  ) {
    var tmparr = prmarr[i].split("=");
    params[tmparr[0]] = tmparr[1];
  }
  return params;
}
window.location.href.split("?")

Но это тоже не сработало. Как я могу получить responseText для другого метода, чтобы использовать?

Array.prototype.slice.call(window.location.href.split("?"), 1) 

возвращает массив ваших параметров url

var paramArray = Array.prototype.slice.call(window.location.href.split(/[?=] /), 1);
var paramObject = paramArray.reduce(function(x, y, i, a){ (i%2==0) ?  (x[y] = a[i 1]) : void 0; return x; }, {});

, и после просмотра спецификаций я нахожу:

function getParamValue(param) {
    var urlParamString = location.search.split(param   "=");
    if (urlParamString.length <= 1) return "";
    else {
        var tmp = urlParamString[1].split("&");
        return tmp[0];
    }
}

Вы можете попробовать следующее:

Не тот ответ, который вы ищете? Просмотреть другие вопросы с тегами. Для разработки ответа Стивена Спилберга я сделал это в таком случае: { *} Выражение задайте свой вопрос Глядя на вывод

, несколько абзацев под большой таблицей в начале этого раздела), где говорится:

У меня есть URL с некоторыми параметрами GET следующим образом:

www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5 

ES2015, 1-liner, который хорошо сцепляется с c. Я пытался прочитать URL, но получил только m2 Так в чем же разница между функциональной областью и областью блока?

Мы можем получить c значения параметров проще, без зацикливания всех параметров, см. Ниже jQuery для получения параметров. {* } http://jsfiddle.net/VktA6/49/

1. Чтобы получить значение параметра:

var url = "www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5";

url.match(**/(c=)[0-9A-Za-z-] /ig**)[0].replace('c=',"")

(или)

url.match(**/(c=)[0-z-] /ig**)[0].replace('c=',"")

возврат в виде строки

«m2-m3-m4-m5»

2. Чтобы заменить значение параметра:

var url = "www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5";

url.replace(**/(c=)[0-9A-Za-z-] /ig, "c=m2345"**)

задает новый вопрос — безусловно, самая полная реализация синтаксического анализатора строки запроса JavaScript, которую я когда-либо видел.

К сожалению, он написан как плагин jQuery.

Я переписал его на vanilla JS и сделал несколько улучшений:

function parseQuery(str) {
  var qso = {};
  var qs = (str || document.location.search);
  // Check for an empty querystring
  if (qs == "") {
    return qso;
  }
  // Normalize the querystring
  qs = qs.replace(/(^?)/, '').replace(/;/g, '&');
  while (qs.indexOf("&&") != -1) {
    qs = qs.replace(/&&/g, '&');
  }
  qs = qs.replace(/([&] $)/, '');
  // Break the querystring into parts
  qs = qs.split("&");
  // Build the querystring object
  for (var i = 0; i < qs.length; i  ) {
    var qi = qs[i].split("=");
    qi = qi.map(function(n) {
      return decodeURIComponent(n)
    });
    if (typeof qi[1] === "undefined") {
      qi[1] = null;
    }
    if (typeof qso[qi[0]] !== "undefined") {

      // If a key already exists then make this an object
      if (typeof (qso[qi[0]]) == "string") {
        var temp = qso[qi[0]];
        if (qi[1] == "") {
          qi[1] = null;
        }
        qso[qi[0]] = [];
        qso[qi[0]].push(temp);
        qso[qi[0]].push(qi[1]);

      } else if (typeof (qso[qi[0]]) == "object") {
        if (qi[1] == "") {
          qi[1] = null;
        }
        qso[qi[0]].push(qi[1]);
      }
    } else {
      // If no key exists just set it as a string
      if (qi[1] == "") {
        qi[1] = null;
      }
      qso[qi[0]] = qi[1];
    }
  }
  return qso;
}

// DEMO
console.log(parseQuery("?foo=bar&foo=boo&roo=bar;bee=bop;=ghost;=ghost2;&;checkbox[]=b1;checkbox[]=b2;dd=;http=http://w3schools.com/my test.asp?name=ståle&car=saab&http=http://w3schools2.com/my test.asp?name=ståle&car=saab"));

См. также this Fiddle Глядя на вывод

Вы можете добавить поле ввода и затем попросить пользователя скопировать в него значение … это действительно легко:

<h1>Hey User! Can you please copy the value out of the location bar where it says like, &m=2? Thanks! And then, if you could...paste it in the box below and click the Done button?</h1>
<input type='text' id='the-url-value' />
<input type='button' value='This is the Done button. Click here after you do all that other stuff I wrote.' />

<script>
//...read the value on click

Хорошо, серьезно, хотя … Я нашел этот код, и он, кажется, работает хорошо:

http://www.developerdrive.com/2013/08/turning-the-querystring-into-a-json-object-using-javascript/

function queryToJSON() {
    var pairs = location.search.slice(1).split('&');

    var result = {};
    pairs.forEach(function(pair) {
        pair = pair.split('=');
        result[pair[0]] = decodeURIComponent(pair[1] || '');
    });

    return JSON.parse(JSON.stringify(result));
}

var query = queryToJSON();

Используйте dojo. Никакое другое решение здесь не является таким коротким или хорошо проверенным:

require(["dojo/io-query"], function(ioQuery){
    var uri = "www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5 ";
    var query = uri.substring(uri.indexOf("?")   1, uri.length);
    var queryObject = ioQuery.queryToObject(query);
    console.log(queryObject.c); //prints m2-m3-m4-m5
});

PHP parse_str copycat .. :)

// Handles also array params well
function parseQueryString(query) {
    var pars = (query != null ? query : "").replace(/& /g, "&").split('&'),
        par, key, val, re = /^([w] )[(.*)]/i, ra, ks, ki, i = 0,
        params = {};

    while ((par = pars.shift()) && (par = par.split('=', 2))) {
        key = decodeURIComponent(par[0]);
        // prevent param value going to be "undefined" as string
        val = decodeURIComponent(par[1] || "").replace(/ /g, " ");
        // check array params
        if (ra = re.exec(key)) {
            ks = ra[1];
            // init array param
            if (!(ks in params)) {
                params[ks] = {};
            }
            // set int key
            ki = (ra[2] != "") ? ra[2] : i  ;
            // set array param
            params[ks][ki] = val;
            // go on..
            continue;
        }
        // set param
        params[key] = val;
    }

    return params;
}

var query = 'foo=1&bar=The bar! &arr[]=a0&arr[]=a1&arr[s]=as&isset&arr[]=last';
var params = parseQueryString(query);
console.log(params)
console.log(params.foo)        // 1
console.log(params.bar)        // The bar!
console.log(params.arr[0])     // a0
console.log(params.arr[1])     // a1
console.log(params.arr.s)      // as
console.log(params.arr.none)   // undefined
console.log("isset" in params) // true like: isset($_GET['isset'])



/*
// in php
parse_str('foo=1&bar=The bar! &arr[]=a0&arr[]=a1&arr[s]=as&isset&arr[]=last', $query);
print_r($query);

Array
(
    [foo] => 1
    [bar] => The bar!
    [arr] => Array
        (
            [0] => a0
            [1] => a1
            [s] => as
            [2] => last
        )

    [isset] =>
)*/

URL: example.com/mortgage_calc.htm?pmts=120ndom*. enjamp‹*** enjintr=6.8ndom*. comingampndom*** enjprin=10000

Ванильный Javascript:

for ( var vObj = {}, i=0, vArr = window.location.search.substring(1).split('&');
        i < vArr.length; v = vArr[i  ].split('='), vObj[v[0]] = v[1] ){}
// vObj = {pmts: "120", intr: "6.8", prin: "10000"}

, чтобы извлечь все параметры URL из поискового объекта в window.location как json

export const getURLParams = location => {
    const searchParams = new URLSearchParams(location.search)
    const params = {}

    for (let key of searchParams.keys()) {
        params[key] = searchParams.get(key)
    }

    return params
}

console.log(getURLParams({ search: '?query=someting&anotherquery=anotherthing' }))

// --> {query: "someting", anotherquery: "anotherthing"}

Помимо $ rootScope и сервисов, есть простое и простое альтернативное решение для расширения угла, чтобы добавить общие данные: .forEach() прокладкой для & lt ; IE8:

var getParams = function () {
  var params = {};
  if (location.search) {
    var parts = location.search.slice(1).split('&');

    parts.forEach(function (part) {
      var pair = part.split('=');
      pair[0] = decodeURIComponent(pair[0]);
      pair[1] = decodeURIComponent(pair[1]);
      params[pair[0]] = (pair[1] !== 'undefined') ?
        pair[1] : true;
    });
  }
  return params;
}

Это «полностью экранирует» литеральную строку для любого из следующих применений в регулярных выражениях: JSFiddle

ненавязчивый

function getParams(url){
    var paramsStart = url.indexOf('?');
    var params = null;

    //no params available
    if(paramsStart != -1){
        var paramsString = url.substring(url.indexOf('?')   1, url.length);

        //only '?' available
        if(paramsString != ""){
            var paramsPairs = paramsString.split('&');

            //preparing
            params = {};
            var empty = true;
            var index  = 0;
            var key = "";
            var val = "";

            for(i = 0, len = paramsPairs.length; i < len; i  ){
                index = paramsPairs[i].indexOf('=');

                //if assignment symbol found
                if(index != -1){
                    key = paramsPairs[i].substring(0, index);
                    val = paramsPairs[i].substring(index   1, paramsPairs[i].length);

                    if(key != "" && val != ""){

                        //extend here for decoding, integer parsing, whatever...

                        params[key] = val;

                        if(empty){
                            empty = false;
                        }
                    }                    
                }
            }

            if(empty){
                params = null;
            }
        }
    }

    return params;
}

Учимся на многих ответах (например, VaMoose , Gnarf или Это простое регулярное выражение, в большинстве случаев избегающее замены частей слов. Тем не менее, тире ‘s).

Вы можете создать объект (или использовать объект Location) и добавить метод, который позволяет вам получить параметры URL, декодировано и в стиле JS:

Url = {
    params: undefined,
    get get(){
        if(!this.params){
            var vars = {};
            if(url.length!==0)
                url.replace(/[?&] ([^=&] )=([^&]*)/gi, function(m,key,value){
                    key=decodeURIComponent(key);
                    if(typeof vars[key]==="undefined") {
                        vars[key]= decodeURIComponent(value);
                    }
                    else {
                        vars[key]= [].concat(vars[key], decodeURIComponent(value));
                    }
                });
            this.params = vars;
        }
        return this.params;
    }
};

Это позволяет вызывать метод, просто используя Url.get Глядя на вывод

Естественно, это все равно, что просто набрать !! someThing, но добавленные круглые скобки могут помочь сделать его более понятным.

Пример

В URL-адресе следует использовать тип ?param1=param1Value&param2=param2Value&param1=param1Value2, параметры могут быть получены как:

Url.get.param1 //["param1Value","param1Value2"]
Url.get.param2 //"param2Value"

Я разработал инструмент JavaScript, чтобы сделать это за один простой шаг

на всю область блока, в котором они появляются. В отличие от этого,

<script src="https://booligoosh.github.io/urlParams/urlParams.js"></script>

Затем просто получите значение c, используя urlParams.c или urlParams['c'] Схема URI

распространен Глядя на вывод

. Также имейте в виду, что я это разработал, но это простое и беззаботное решение вашей проблемы. Этот инструмент также включает в себя декодирование шестнадцатеричных символов, которое часто может быть полезным.

Получите одно значение параметра:

function getQueryParameter(query, parameter) {
return (window.location.href.split(parameter   '=')[1].split('&')[0]);}
$_GET: function (param) {
    var regex = new RegExp("(?:[?&] "   param   "=)([^&]*)?", "i");
    var match = regex.exec(window.location.href);
    return match === null ? match : match[1];
}

Это работает:

function getURLParameter(name) {
  return decodeURIComponent((new RegExp('[?|&]'   name   '='   '([^&;] ?)(&|#|;|$)').exec(location.href) || [null, ''])[1].replace(/ /g, ' ')) || null;
}

Я не получил ни одного из лучших ответов.

, вы можете запустить эту функцию

    function getUrlVars()
    {
        var vars = [], hash;
        var hashes = window.location.href.slice(window.location.href.indexOf('?')   1).split('&');
        for(var i = 0; i < hashes.length; i  )
        {
            hash = hashes[i].split('=');
            vars.push(hash[0]);
            vars[hash[0]] = hash[1];
        }
        return vars;
    }

    var source = getUrlVars()["lm_supplier"];
    var el = source.toString();
    var result= decodeURI(el);

console.log(result)

эта функция получает то, что вы хотите от URL, var source = getUrlVars () [«поместите то, что вы хотите получить от URL»] {*** }

    function gup() {
    var qs = document.location.search;
    qs = qs.split(' ').join(' ');
    var params = {}, tokens, re = /[?&]?([^=] )=([^&]*)/g;
    while (tokens = re.exec(qs))
        params[decodeURIComponent(tokens[1])] = decodeURIComponent(tokens[2]);
    return params;
}

используйте его как

var params = gup()

, а затем

params.param1
params.param2

Оператор Chrome

window.location.replace("https://newdomain.com"   window.location.pathname);

Я пробовал много разных способов, но эта проверенная и правильная функция регулярного выражения работает для меня, когда я ищу значения параметров в URL, надеюсь, это поможет:

        var text = 'www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5'

        function QueryString(item, text){
            var foundString = text.match(new RegExp("[?&]"   item   "=([^&]*)(&?)","i"));
            return foundString ? foundString[1] : foundString;
        }

        console.log(QueryString('c', text));

используйте, как QueuryString('param_name', url), и вернет значение

m2-m3-m4-m5

Я предпочитаю использовать доступные ресурсы, а не изобретать, как анализировать эти параметры.

  1. Анализировать URL как объект
  2. Извлеките часть параметров поиска
  3. Преобразовать searchParams из Итератора в Массив с расширением массива.
  4. Существует разница между неопределенным членом и определенным членом с неопределенным значением.
const url = 'http://www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5';
const params = [... new URL(url).searchParams.entries()]
  .reduce((a, c) => Object.assign(a, {[c[0]]:c[1]}), {})

console.log(params);

. Если item является примитивом (как в myArrayOfPrimitives), по сути, копия значения присваивается новому дочернему свойству scope. Изменение значения свойства дочерней области (т. Е. Использование ng-модели, следовательно, дочерняя область URL api, Однако более согласованным нативным простым решением javascript для получения всех параметров в объекте и их использования может быть

Например, этот класс говорит: locationUtil

const locationSearch = () => window.location.search;
const getParams = () => {
  const usefulSearch = locationSearch().replace('?', '');
  const params = {};
  usefulSearch.split('&').map(p => {
    const searchParam = p.split('=');
    const [key, value] = searchParam;
    params[key] = value;
    return params;
  });
  return params;
};

export const searchParams = getParams();

Usage :: Теперь вы можете импортировать объект searchParams в свой класс

для примера для url — https://www.google.com?key1=https://www.linkedin.com/in/spiara/&valid=true

import { searchParams } from '../somewhere/locationUtil';

const {key1, valid} = searchParams;
if(valid) {
 console.log("Do Something");
 window.location.href = key1;
}

Если это форма, они будут всегда оставляйте фокус каждого поля ввода, чтобы нажимать кнопку отправки, чтобы вы знали, что ни один из входных данных не пропустит вызов обработчика события onfocusout.

var url_string = "http://www.example.com/t.html?a=1&b=3&c=m2-m3-m4-m5";
var url = new URL(url_string);
let obj = {};
var c = url.searchParams.forEach((value, key) => {
  obj[key] = value;
});
console.log(obj);
function parseUrl(url){
    let urlParam = url.split("?")[1];
    console.log("---------> URL param : "   urlParam);
    urlParam = urlParam.split("&");
    let urlParamObject = {};
    for(let i=0;i < urlParam.length;i  ){
        let tmp = urlParam[i].split("=");
        urlParamObject[tmp[0]] = tmp[1];
    }
    return urlParamObject;
}

let param = parseUrl(url);
param.a // output 10
param.b // output 20

У меня была одна и та же проблема снова и снова. Сейчас многие пользователи здесь, сейчас я известен своей работой по HAX,

, поэтому я решаю его, используя:

Я удалил

echo "<p style="display:none" id="hidden-GET">".$_GET['id']."</p>";

JS:

document.getElementById("hidden-GET").innerHTML;

Вам не нужно беспокоиться о проверке даты. Даже если строка соответствует формату ISO-8601, она не может быть реальной датой ;, это никогда не может произойти с датой EJSON.

Не тот ответ, который вы ищете? Просмотреть другие вопросы с тегами. Для разработки ответа Стивена Спилберга я сделал это в таком случае: { *} Выражение задайте свой вопрос Глядя на вывод

Понравилась статья? Поделиться с друзьями:
JavaScript & TypeScript
Adblock
detector