web-dev-qa-db-ja.com

JavaScriptでURLのGETパラメーターを使用する

次のようなページにいる場合

http://somesite.com/somepage.php?param1=asdf

そのページのJavaScriptで、URLのGET部分のパラメーターの値に変数を設定したいと思います。

JavaScriptで:

<script>
   param1var = ...   // ... would be replaced with the code to get asdf from URI
</script>

「...」とは何ですか?

40
RobKohr

そのためのいくつかのサンプルコード.

<script>
var param1var = getQueryVariable("param1");

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 (pair[0] == variable) {
      return pair[1];
    }
  } 
  alert('Query Variable ' + variable + ' not found');
}
</script>
95
Jose Basilio

ロケーションオブジェクトの「検索」部分を取得し、解析することができます。

var matches = /param1=([^&#=]*)/.exec(window.location.search);
var param1 = matches[1];
9
gnarf

このgnarfのソリューションのバリエーションを作成したので、呼び出しと結果はPHPに似ています。

_function S_GET(id){
    var a = new RegExp(id+"=([^&#=]*)");
    return decodeURIComponent(a.exec(window.location.search)[1]);
}
_

ただし、関数で呼び出されるとプロセスが遅くなるため、グローバルとして使用する方が適切です。

_window['_var_name_'] = decodeURIComponent( /_var_in_get=([^&#=]*)/.exec(window.location.search)[1] );

[〜#〜] update [〜#〜]

私はまだJSを学んでいるので、より多くのJS挙動でより良い答えを作成しました:

_Url = {
    get get(){
        var vars= {};
        if(window.location.search.length!==0)
            window.location.search.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));}
            });
        return vars;
    }
};
_

これにより、_Url.get_を使用して呼び出すことができます。

URL _?param1=param1Value&param2=param2Value_は次のように呼び出すことができます:

_Url.get.param1 //"param1Value"
Url.get.param2 //"param2Value"
_

ここにスニペットがあります:

_// URL GET params
url = "?a=2&a=3&b=2&a=4";

Url = {
    get get(){
        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));}
            });
        return vars;
    }
};

document.querySelector('log').innerHTML = JSON.stringify(Url.get);_
_<log></log>_
7
Gatsbimantico

Coffee Scriptでこれを行う方法は次のとおりです(誰かが興味を持っている場合のみ)。

decodeURIComponent( v.split( "=" )[1] ) if decodeURIComponent( v.split( "=" )[0] ) == name for v in window.location.search.substring( 1 ).split( "&" )
2
Jasper Kennis

私のプログラミングアーカイブから:

function querystring(key) {
   var re=new RegExp('(?:\\?|&)'+key+'=(.*?)(?=&|$)','gi');
   var r=[], m;
   while ((m=re.exec(document.location.search)) != null) r[r.length]=m[1];
   return r;
}

値が存在しない場合、空の配列が返されます。
値が存在する場合、1つの項目、値を持つ配列が返されます。
名前を持つ複数の値が存在する場合、各値を含む配列が返されます。

例:

var param1var = querystring("param1")[0];

document.write(querystring("name"));

if (querystring('id')=='42') alert('We apoligize for the inconvenience.');

if (querystring('button').length>0) alert(querystring('info'));
2
Guffa

JSLintが気に入っているバージョンは次のとおりです。

/*jslint browser: true */
var GET = {};
(function (input) {
    'use strict';
    if (input.length > 1) {
        var param = input.slice(1).replace(/\+/g, ' ').split('&'),
            plength = param.length,
            tmp,
            p;

        for (p = 0; p < plength; p += 1) {
            tmp = param[p].split('=');
            GET[decodeURIComponent(tmp[0])] = decodeURIComponent(tmp[1]);
        }
    }
}(window.location.search));

window.alert(JSON.stringify(GET));

または、たとえば次のような1つのキーの複数の値のサポートが必要な場合?key = value1&key = value2これを使用できます:

/*jslint browser: true */
var GET = {};
(function (input) {
    'use strict';
    if (input.length > 1) {
        var params = input.slice(1).replace(/\+/g, ' ').split('&'),
            plength = params.length,
            tmp,
            key,
            val,
            obj,
            p;

        for (p = 0; p < plength; p += 1) {
            tmp = params[p].split('=');
            key = decodeURIComponent(tmp[0]);
            val = decodeURIComponent(tmp[1]);
            if (GET.hasOwnProperty(key)) {
                obj = GET[key];
                if (obj.constructor === Array) {
                    obj.Push(val);
                } else {
                    GET[key] = [obj, val];
                }
            } else {
                GET[key] = val;
            }
        }
    }
}(window.location.search));

window.alert(JSON.stringify(GET));
0
msand

この機能を使用できます

function getParmFromUrl(url, parm) {
    var re = new RegExp(".*[?&]" + parm + "=([^&]+)(&|$)");
    var match = url.match(re);
    return(match ? match[1] : "");
}
0
Reza

すでにphpページを実行している場合

phpビット:

    $json   =   json_encode($_REQUEST, JSON_FORCE_OBJECT);
    print "<script>var getVars = $json;</script>";

jsビット:

    var param1var = getVars.param1var;

しかし、Htmlページについては、Jose Basilioのソリューションが良さそうです。

幸運を!

0
PowerAktar

実際には、特別なことをする必要はありません。 JavaScriptとPHPを組み合わせて、PHPから直接JavaScriptに変数を取得できます。

var param1val = '<?php echo $_GET['param1'] ?>';
0
Mark

Jqueryを使用していますか?私はこれを以前に使用しました: http://projects.allmarkedup.com/jquery_url_parser/ そしてそれはかなりうまくいった。

0
marcc

これは大丈夫に見えました:

function gup( 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 results[1];
}

から http://www.netlobo.com/url_query_string_javascript.html

0
agilefall