使用jquery解析url查询字符串并将值插入文本框中?

时间:2010-09-09 19:49:49

标签: javascript jquery parsing query-string

post.php?replyto=username&othervariable=value

例如,如果我单击带有此URL的链接,那么我想获取replyto=username值并使用jquery在文本框中插入值。

function insertParamIntoField(url, param, field) { 
       var anchor = document.createElement('a'), query;
       anchor.value = url;
       query = anchor.query.split('&');

       for(var i = 0, kv; i < query.length; i++) {
          kv = query[i].split('=', 2);
          if (kv[0] == param) {
             field.value = kv[1];
             return;
          }
       }  
    }

    $("a .reply").click(function () {
       insertParamIntoField(this.href, "replyto", $("input .inputField")[0]);
       return false; // prevent default action
    });

这是我的HTML代码:

<textarea name="inputField" id="inputField" tabindex="1" rows="2" cols="40"></textarea>
<a class ="reply"  href="home.php?replyto=username">reply</a>

6 个答案:

答案 0 :(得分:2)

function insertParamIntoField(url, param, field) { 
   var anchor = document.createElement('a'), query;
   anchor.href = url;
   query = anchor.search.substring(1, anchor.search.length).split('&');

   for(var i = 0, kv; i < query.length; i++) {
      kv = query[i].split('=', 2); console.log(kv);
      if (kv[0] == param) {
         field.value = kv[1];
         return;
      }
   }  
}

$("a.reply").click(function () {
   insertParamIntoField(this.href, "replyto", $("textarea.inputField")[0]);
   return false; // prevent default action
});

insertParamIntoField函数适用于任何格式良好的URL(作为字符串)。它的工作原理是为该URL创建一个新的锚DOMElement(但永远不会将它附加到dom),然后使用anchor元素的内置属性(查询,哈希等)来提取我们想要的东西。

如果URL来自锚元素,我们可以创建此函数的新版本,该版本使用现有锚点而不是创建新锚点:

function insertParamIntoField(anchor, param, field) { 
   var query = anchor.search.substring(1, anchor.search.length).split('&'); // anchor is a DOMElement 

   for(var i = 0, kv; i < query.length; i++) {
      kv = query[i].split('=', 2);
      if (kv[0] == param) {
         field.value = kv[1];
         return;
      }
   }  
}

$("a.reply").click(function () {
   insertParamIntoField(this, "replyto", $("textarea.inputField")[0]);
   return false; // prevent default action
});

答案 1 :(得分:1)

可以使用a simple function解析网址。在Javascript中使用它:

$.urlParam = function(name){
  var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(window.location.href);
  return results[1] || 0;
}

然后你可以打电话:

$.urlParam('username');

它将返回用户名。因此,要在文本框中实际使用它,请执行以下操作:

$('#textBoxId').val($.urlParam('username'));

答案 2 :(得分:0)

$('textarea').val("<?php echo $_GET['replyto']");

答案 3 :(得分:0)

使用this SO answerArtem Barger代码(这是很棒的顺便说一句),{{3}}可以从查询字符串中按名称获取任何参数:

function getParameterByName( name ) 
{ 
    name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]"); 
    var regexS = "[\\?&]"+name+"=([^&#]*)"; 
    var regex = new RegExp( regexS ); 
    var results = regex.exec( window.location.href ); 
    if(results == null ) 
        return ""; 
    else 
       return decodeURIComponent(results[1].replace(/\+/g, " ")); 
} 

然后只需将值插入文本框:

$("#yourTextBox").val(getParameterByName('replyto')); 

答案 4 :(得分:0)

您应该能够使用?replyto=username&othervariable=value抓取window.location.search部分,然后您必须获得所需的部分

var print = '?replyto=username&othervariable=value'; // Would be window.location.search in practice
$('textBox').val(print.substr(print.indexOf('replyto=')+8,print.indexOf('&')-(print.indexOf('replyto=')+8)));

答案 5 :(得分:0)

以下是一些可以帮助您的Javascript。只需从getQuerystringNameValue()函数中获取返回值并使用$(“#textboxID”)。val(returnValue);将其分配给文本框。

alert("name1" + " = " + getQuerystringNameValue("name1"));
alert("name2" + " = " + getQuerystringNameValue("name2"));
alert("name3" + " = " + getQuerystringNameValue("name3"));


function getQuerystringNameValue(name)
{
    // For example... passing a name parameter of "name1" will return a value of "100", etc.
    // page.htm?name1=100&name2=101&name3=102

    var winURL = window.location.href;
    var queryStringArray = winURL.split("?");
    var queryStringParamArray = queryStringArray[1].split("&");
    var nameValue = null;

    for ( var i=0; i<queryStringParamArray.length; i++ )
    {           
        queryStringNameValueArray = queryStringParamArray[i].split("=");

        if ( name == queryStringNameValueArray[0] )
        {
            nameValue = queryStringNameValueArray[1];
        }                       
    }

    return nameValue;
}