303

URL パラメーターを取得できる jQuery プラグインを探しており、JavaScript エラー「不正な URI シーケンス」を出力せずにこの検索文字列をサポートしています。これをサポートする jQuery プラグインがない場合は、これをサポートするように変更する方法を知る必要があります。

?search=%E6%F8%E5

デコード時の URL パラメータの値は次のようになります。

æøå

(登場人物はノルウェー人)。

サーバーへのアクセス権がないため、サーバー上で何も変更できません。

4

19 に答える 19

418
function getURLParameter(name) {
    return decodeURI(
        (RegExp(name + '=' + '(.+?)(&|$)').exec(location.search)||[,null])[1]
    );
}
于 2009-09-10T08:38:09.217 に答える
107

本当に必要なのはjQuery URL Parser pluginです。このプラグインを使用すると、(現在の URL の) 特定の URL パラメーターの値を取得すると、次のようになります。

$.url().param('foo');

param()パラメータ名をキーとして、パラメータ値を値として持つオブジェクトが必要な場合は、次のように引数なしで呼び出すだけです。

$.url().param();

このライブラリは、現在の URL だけでなく、他の URL でも機能します。

$.url('http://allmarkedup.com?sky=blue&grass=green').param();
$('#myElement').url().param(); // works with elements that have 'src', 'href' or 'action' attributes

これは完全な URL 解析ライブラリであるため、指定されたポート、パス、プロトコルなど、URL から他の情報を取得することもできます。

var url = $.url('http://allmarkedup.com/folder/dir/index.html?item=value');
url.attr('protocol'); // returns 'http'
url.attr('path'); // returns '/folder/dir/index.html'

他の機能もあります。ホームページでドキュメントや例を確認してください。

この特定の目的のために、ほとんどの場合に機能する独自の URIパーサーを作成する代わりに、実際の URI パーサーを使用してください。回答に応じて、他の回答からのコードが の代わりに返される、空のパラメーター ( ) では機能しない、一度にすべてのパラメーターを解析して返すことができない、パラメーターの URL に繰り返しクエリを実行すると作業が繰り返される、などがあります。'null'null?foo=&bar=x

実際の URI パーサーを使用してください。独自に作成しないでください。

jQuery を嫌う人のために、純粋な JS であるプラグインのバージョンがあります

于 2012-06-01T00:18:54.277 に答える
43

URL パラメーターがどうなるかわからず、パラメーターにあるキーと値を持つオブジェクトを取得したい場合は、これを使用できます。

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

次のような URL で getParameters() を呼び出すと、次のよう/posts?date=9/10/11&author=nilbusに返されます。

{
  date:   '9/10/11',
  author: 'nilbus'
}

質問からさらに離れているため、ここにはコードを含めませんが、weareon.net は、URL のパラメーターも操作できるライブラリを投稿しました。

于 2012-01-18T16:23:13.130 に答える
40

ブラウザ ネイティブのlocation.searchプロパティを使用できます。

function getParameter(paramName) {
  var searchString = window.location.search.substring(1),
      i, val, params = searchString.split("&");

  for (i=0;i<params.length;i++) {
    val = params[i].split("=");
    if (val[0] == paramName) {
      return unescape(val[1]);
    }
  }
  return null;
}

ただし、役立つ jQuery プラグインがいくつかあります。

于 2009-09-10T07:51:44.823 に答える
25

999の回答に基づく:

function getURLParameter(name) {
    return decodeURIComponent(
        (location.search.match(RegExp("[?|&]"+name+'=(.+?)(&|$)'))||[,null])[1]
    );  
}

変更点:

  • decodeURI()に置き換えられますdecodeURIComponent()
  • [?|&]正規表現の先頭に追加されます
于 2011-12-22T13:58:25.773 に答える
6

大文字と小文字を区別しないようにするには、 i パラメータを追加する必要があります。

  function getURLParameter(name) {
    return decodeURIComponent(
      (RegExp(name + '=' + '(.+?)(&|$)', 'i').exec(location.search) || [, ""])[1]
    );
  }
于 2012-12-18T14:48:31.443 に答える
3

すべての回答を読んだ後、パラメータをフラグとして使用するための2番目の関数を備えたこのバージョンになりました

function getURLParameter(name) {
    return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)','i').exec(location.search)||[,""])[1].replace(/\+/g, '%20'))||null;
}

function isSetURLParameter(name) {
    return (new RegExp('[?|&]' + name + '(?:[=|&|#|;|]|$)','i').exec(location.search) !== null)
}
于 2013-05-06T18:22:07.380 に答える
2
$.urlParam = function(name){
  var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(top.window.location.href); 
  return (results !== null) ? results[1] : 0;
}

$.urlParam("key");
于 2012-05-24T04:30:19.180 に答える
2

たとえば、任意のパラメータ変数の値を返す関数。

function GetURLParameter(sParam)
{
    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] == sParam)
        {
            return sParameterName[1];
        }
    }
}​

そして、これは、URLが次のようになっていると仮定してこの関数を使用する方法です。

「http://example.com/?technology=jquery&blog=jquerybyexample」。

var tech = GetURLParameter('technology');
var blog = GetURLParameter('blog');

したがって、上記のコードでは、変数「tech」は値として「jQuery」を持ち、「blog」変数は「jquerybyexample」になります。

于 2013-01-22T08:55:42.063 に答える
2

このような目的で jQuery を使用するべきではありません。
最新の方法は、Bower のようなパッケージ マネージャーを介して小さな再利用可能なモジュールを使用することです。

クエリ文字列をオブジェクトに解析できる小さなモジュールを作成しました。次のように使用します。

// parse the query string into an object and get the property
queryString.parse(unescape(location.search)).search;
//=> æøå
于 2013-11-15T02:29:13.473 に答える
0
<script type="text/javascript">
function getURLParameter(name) {
        return decodeURIComponent(
            (location.search.toLowerCase().match(RegExp("[?|&]" + name + '=(.+?)(&|$)')) || [, null])[1]
        );
    }

</script>

getURLParameter(id)またはgetURLParameter(Id)同じように動作します:)

于 2013-08-06T09:13:52.233 に答える
0

ここにはバグのあるコードがたくさんあり、正規表現ソリューションは非常に遅いです。対応する正規表現よりも最大 20 倍高速に動作し、洗練されたシンプルなソリューションを見つけました。

    /*
    *   @param      string      parameter to return the value of.
    *   @return     string      value of chosen parameter, if found.
    */
    function get_param(return_this)
    {
        return_this = return_this.replace(/\?/ig, "").replace(/=/ig, ""); // Globally replace illegal chars.

        var url = window.location.href;                                   // Get the URL.
        var parameters = url.substring(url.indexOf("?") + 1).split("&");  // Split by "param=value".
        var params = [];                                                  // Array to store individual values.

        for(var i = 0; i < parameters.length; i++)
            if(parameters[i].search(return_this + "=") != -1)
                return parameters[i].substring(parameters[i].indexOf("=") + 1).split("+");

        return "Parameter not found";
    }

console.log(get_param("parameterName"));

正規表現は、すべてを解決するものではありません。このタイプの問題では、単純な文字列操作が非常に効率的に機能する可能性があります。コードソース

于 2013-07-02T01:04:15.930 に答える
-1

次のような URL から JavaScript で URL パラメーターを取得する単純な関数を作成しました。

.....58e/web/viewer.html?page=*17*&getinfo=33


function buildLinkb(param) {
    var val = document.URL;
    var url = val.substr(val.indexOf(param))  
    var n=parseInt(url.replace(param+"=",""));
    alert(n+1); 
}
buildLinkb("page");

出力:18

于 2012-08-04T12:01:51.837 に答える
-1

localhost/index.xsp?a=1#something のような URL を持っていて、ハッシュではなくパラメータを取得する必要がある場合に備えて。

var vars = [], hash, anchor;
var q = document.URL.split('?')[1];
if(q != undefined){
    q = q.split('&');
    for(var i = 0; i < q.length; i++){
        hash = q[i].split('=');
        anchor = hash[1].split('#');
        vars.push(anchor[0]);
        vars[hash[0]] = anchor[0];
    }
}
于 2012-09-25T08:27:53.257 に答える
-1

他のパラメーター名の一部である可能性があるパラメーター名を適切に処理しないため、@pauloppenheim による回答をわずかに変更します。

例: 「appenv」と「env」パラメータがある場合、「env」の値を変更すると、「appenv」値を取得できます。

修理:

var urlParamVal = function (name) {
    var result = RegExp("(&|\\?)" + name + "=(.+?)(&|$)").exec(location.search);
    return result ? decodeURIComponent(result[2]) : "";
};
于 2013-07-30T21:29:16.640 に答える
-1
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("Param:"+arrParamValues[i]);
                return arrParamValues[i];
             }
       }
       return "No Parameters Found";
    }

}
于 2012-01-05T20:21:19.027 に答える
-2

これが役立つ場合があります。

<script type="text/javascript">
    $(document).ready(function(){
        alert(getParameterByName("third"));
    });
    function getParameterByName(name){
        var url     = document.URL,
            count   = url.indexOf(name);
            sub     = url.substring(count);
            amper   = sub.indexOf("&"); 

        if(amper == "-1"){
            var param = sub.split("=");
            return param[1];
        }else{
            var param = sub.substr(0,amper).split("=");
            return param[1];
        }

    }
</script>
于 2012-09-13T01:34:12.483 に答える