texto negrita letra ejemplos change javascript parsing query-string

negrita - Analizar cadena de consulta en JavaScript



letra negrita en alert javascript (12)

Posible duplicado:
¿Cómo puedo obtener valores de cadena de consulta?

Necesito analizar la cadena de consulta www.mysite.com/default.aspx?dest=aboutus.aspx . ¿Cómo obtengo la variable dest en JavaScript?


¡Yo también! http://jsfiddle.net/drzaus/8EE8k/

(Nota: sin verificación anidada o duplicada)

deparam = function (querystring) { // remove any preceding url and split querystring = querystring.substring(querystring.indexOf(''?'')+1).split(''&''); var params = {}, pair, d = decodeURIComponent; // march and parse for (var i = querystring.length - 1; i >= 0; i--) { pair = querystring[i].split(''=''); params[d(pair[0])] = d(pair[1] || ''''); } return params; };//-- fn deparam

Y pruebas:

var tests = {}; tests["simple params"] = "ID=2&first=1&second=b"; tests["full url"] = "http://blah.com/?" + tests["simple params"]; tests[''just ?''] = ''?'' + tests[''simple params'']; var $output = document.getElementById(''output''); function output(msg) { $output.innerHTML += "/n" + Array.prototype.slice.call(arguments, 0).join("/n"); } $.each(tests, function(msg, test) { var q = deparam(test); // prompt, querystring, result, reverse output(msg, test, JSON.stringify(q), $.param(q)); output(''-------------------''); });

Resultados en:

simple params ID=2&first=1&second=b {"second":"b","first":"1","ID":"2"} second=b&first=1&ID=2 ------------------- full url http://blah.com/?ID=2&first=1&second=b {"second":"b","first":"1","ID":"2"} second=b&first=1&ID=2 ------------------- just ? ?ID=2&first=1&second=b {"second":"b","first":"1","ID":"2"} second=b&first=1&ID=2 -------------------


¿Qué tal esto?

function getQueryVar(varName){ // Grab and unescape the query string - appending an ''&'' keeps the RegExp simple // for the sake of this example. var queryStr = unescape(window.location.search) + ''&''; // Dynamic replacement RegExp var regex = new RegExp(''.*?[&//?]'' + varName + ''=(.*?)&.*''); // Apply RegExp to the query string val = queryStr.replace(regex, "$1"); // If the string is the same, we didn''t find a match - return false return val == queryStr ? false : val; }

.. entonces solo llámalo con:

alert(''Var "dest" = '' + getQueryVar(''dest''));

Aclamaciones


Aquí está mi versión basada libremente en la versión de Braceyard anterior, pero analizándola en un ''diccionario'' y soporte para argumentos de búsqueda sin ''=''. En uso en mi función JQuery $ (documento) .ready (). Los argumentos se almacenan como pares clave / valor en argsParsed, que es posible que desee guardar en algún lugar ...

''use strict''; function parseQuery(search) { var args = search.substring(1).split(''&''); var argsParsed = {}; var i, arg, kvp, key, value; for (i=0; i < args.length; i++) { arg = args[i]; if (-1 === arg.indexOf(''='')) { argsParsed[decodeURIComponent(arg).trim()] = true; } else { kvp = arg.split(''=''); key = decodeURIComponent(kvp[0]).trim(); value = decodeURIComponent(kvp[1]).trim(); argsParsed[key] = value; } } return argsParsed; } parseQuery(document.location.search);


Aquí hay una manera rápida y fácil de analizar cadenas de consulta en JavaScript:

function getQueryVariable(variable) { var query = window.location.search.substring(1); var vars = query.split(''&''); for (var i = 0; i < vars.length; i++) { var pair = vars[i].split(''=''); if (decodeURIComponent(pair[0]) == variable) { return decodeURIComponent(pair[1]); } } console.log(''Query variable %s not found'', variable); }

Ahora haga una solicitud a page.html? X = Hola :

console.log(getQueryVariable(''x''));


Echa un vistazo a esta solución . Usando su función, simplemente no deberías llamar a gup(''dest'') para tomar el parámetro dest URL.


La siguiente función analizará la cadena de búsqueda con una expresión regular, almacenará en caché el resultado y devolverá el valor de la variable solicitada:

window.getSearch = function(variable) { var parsedSearch; parsedSearch = window.parsedSearch || (function() { var match, re, ret; re = //??(.*?)=([^/&]*)&?/gi; ret = {}; while (match = re.exec(document.location.search)) { ret[match[1]] = match[2]; } return window.parsedSearch = ret; })(); return parsedSearch[variable]; };

Puede llamarlo una vez sin ningún parámetro y trabajar con el objeto window.parsedSearch , o llamar a getSearch posteriormente. No he probado completamente esto, la expresión regular podría necesitar algunos ajustes ...


Luego de mi comentario a la respuesta que @bobby publicó, aquí está el código que usaría:

function parseQuery(str) { if(typeof str != "string" || str.length == 0) return {}; var s = str.split("&"); var s_length = s.length; var bit, query = {}, first, second; for(var i = 0; i < s_length; i++) { bit = s[i].split("="); first = decodeURIComponent(bit[0]); if(first.length == 0) continue; second = decodeURIComponent(bit[1]); if(typeof query[first] == "undefined") query[first] = second; else if(query[first] instanceof Array) query[first].push(second); else query[first] = [query[first], second]; } return query; }

Este código toma la cadena de consulta proporcionada (como ''str'') y devuelve un objeto. La cadena se divide en todas las apariciones de &, lo que resulta en una matriz. la matriz se transmite y cada elemento se divide por "=". Esto da lugar a matrices secundarias en las que el elemento 0 es el parámetro y el primer elemento es el valor (o indefinido si no = signo). Estos se asignan a las propiedades del objeto, por lo que, por ejemplo, la cadena "hola = 1 y otra = 2 y algo" se convierte en:

{ hello: "1", another: "2", something: undefined }

Además, este código advierte repeticiones de repeticiones como "hello = 1 & hello = 2" y convierte el resultado en una matriz, por ejemplo:

{ hello: ["1", "2"] }

También notará que se trata de casos en los que no se usa el signo =. También ignora si hay un signo igual justo después de un símbolo &.

Un poco exagerado para la pregunta original, pero una solución reutilizable si alguna vez necesitas trabajar con cadenas de consulta en javascript :)


Quería recoger enlaces específicos dentro de un elemento DOM en una página, enviar a esos usuarios a una página de redireccionamiento en un temporizador y luego pasarlos a la URL original en la que se hizo clic. Así es como lo hice usando un javascript normal que incorpora uno de los métodos anteriores.

Página con enlaces: Head

function replaceLinks() { var content = document.getElementById(''mainContent''); var nodes = content.getElementsByTagName(''a''); for (var i = 0; i < document.getElementsByTagName(''a'').length; i++) { { href = nodes[i].href; if (href.indexOf("thisurl.com") != -1) { nodes[i].href="http://www.thisurl.com/redirect.aspx" + "?url=" + nodes[i]; nodes[i].target="_blank"; } } } }

Cuerpo

<body onload="replaceLinks()">

Página de redireccionamiento

function getQueryVariable(variable) { var query = window.location.search.substring(1); var vars = query.split(''&''); for (var i = 0; i < vars.length; i++) { var pair = vars[i].split(''=''); if (decodeURIComponent(pair[0]) == variable) { return decodeURIComponent(pair[1]); } } console.log(''Query variable %s not found'', variable); } function delayer(){ window.location = getQueryVariable(''url'') }

Cuerpo

<body onload="setTimeout(''delayer()'', 1000)">


Quería una función simple que tomara una URL como entrada y devolviera un mapa de los parámetros de consulta. Si tuviera que mejorar esta función, admitiría el estándar para datos de matriz en la URL y / o variables anidadas.

Esto debería funcionar de nuevo y para con la función jQuery.param (qparams).

function getQueryParams(url){ var qparams = {}, parts = (url||'''').split(''?''), qparts, qpart, i=0; if(parts.length <= 1 ){ return qparams; }else{ qparts = parts[1].split(''&''); for(i in qparts){ qpart = qparts[i].split(''=''); qparams[decodeURIComponent(qpart[0])] = decodeURIComponent(qpart[1] || ''''); } } return qparams; };


Si sabe que solo tendrá esa única variable de cadena de consulta, simplemente puede hacer:

var dest = location.search.replace(/^.*?/=/, '''');


También puede utilizar la excelente biblioteca URI.js de Rodney Rehm . Así es cómo:-

var qs = URI(''www.mysite.com/default.aspx?dest=aboutus.aspx'').query(true); // == { dest : ''aboutus.aspx'' } alert(qs.dest); // == aboutus.aspx

Y para analizar la cadena de consulta de la página actual: -

var $_GET = URI(document.URL).query(true); // ala PHP alert($_GET[''dest'']); // == aboutus.aspx


function parseQuery(queryString) { var query = {}; var pairs = (queryString[0] === ''?'' ? queryString.substr(1) : queryString).split(''&''); for (var i = 0; i < pairs.length; i++) { var pair = pairs[i].split(''=''); query[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1] || ''''); } return query; }

Convierte la cadena de consulta como hello=1&another=2 en el objeto {hello: 1, another: 2} . A partir de ahí, es fácil extraer la variable que necesitas.

Dicho esto, no trata con casos de matrices como "hello=1&hello=2&hello=3" . Para trabajar con esto, debes verificar si existe una propiedad del objeto que creas antes de agregarlo, y convertir su valor en una matriz, empujando cualquier bit adicional.