2010-09-09 43 views
0
post.php?replyto=username&othervariable=value 

例如,如果我點擊一個帶有此URL的鏈接,那麼我想採用replyto=username的值,並使用jquery在文本框中插入值。使用jquery解析url querystring並在文本框中插入值?

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> 

回答

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),然後使用錨元素(查詢,散列等)的內置屬性來提取我們想要的內容。

如果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 
}); 
+0

這兩個代碼有什麼區別!對不起,我很困惑,很好的答案;)) – getaway 2010-09-09 20:44:35

+0

@getaway:如果URL位於錨點,請使用第二段代碼,如果URL不在錨點中,請使用第一段代碼(如來自用戶提交) 。此外,爲避免對每個「a」鏈接應用點擊處理程序,請在您希望使用的鏈接中添加一個特殊的類,在我的示例中爲「magicLink」。用實際的字段元素替換'$(「input .magicInput」)[0]'。 – 2010-09-09 20:53:40

+0

我需要第一個謝謝!隊友:)) – getaway 2010-09-09 20:59:35

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

這是你想要的嗎?這將工作,假設文本框和這個jQuery代碼是在post.php。 – 2010-09-09 19:55:41

1

解析URL可以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')); 
0

使用Artem Bargerthis SO answer代碼(這是偉大BTW),以獲得從查詢字符串通過名稱的任何參數,你可以這樣做:

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')); 
0

你應該能夠window.location.search?replyto=username&othervariable=value部分,那麼你必須得到這個角色你想

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))); 

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; 
}