727

パラメータのサイズと名前が不明な jQuery の例をたくさん見てきました。

私の URL には 1 つの文字列しかありません。

http://example.com?sent=yes

私はただ検出したい:

  1. sent存在しますか?
  2. 「はい」に等しいですか?
4

33 に答える 33

1374

ここで最善の解決策。

var getUrlParameter = function getUrlParameter(sParam) {
    var sPageURL = window.location.search.substring(1),
        sURLVariables = sPageURL.split('&'),
        sParameterName,
        i;

    for (i = 0; i < sURLVariables.length; i++) {
        sParameterName = sURLVariables[i].split('=');

        if (sParameterName[0] === sParam) {
            return sParameterName[1] === undefined ? true : decodeURIComponent(sParameterName[1]);
        }
    }
    return false;
};

URL が
http://dummy.com/?technology=jquery&blog=jquerybyexample.

var tech = getUrlParameter('technology');
var blog = getUrlParameter('blog');
于 2014-02-20T09:12:50.447 に答える
222

URL にパラメーターとして保存されている動的変数を取得し、スクリプトで使用できるように JavaScript 変数として保存する jQuery コード スニペット:

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

example.com?param1=name¶m2=&id=6

$.urlParam('param1'); // name
$.urlParam('id');        // 6
$.urlParam('param2');   // null

スペースを含むパラメーターの例

http://www.jquery4u.com?city=Gold Coast
console.log($.urlParam('city'));  
//output: Gold%20Coast



console.log(decodeURIComponent($.urlParam('city'))); 
//output: Gold Coast
于 2014-08-18T08:39:06.303 に答える
103

私はいつもこれを1行に貼り付けます。これで、params に変数が追加されました。

params={};location.search.replace(/[?&]+([^=&]+)=([^&]*)/gi,function(s,k,v){params[k]=v})

複数行:

var params={};
window.location.search
  .replace(/[?&]+([^=&]+)=([^&]*)/gi, function(str,key,value) {
    params[key] = value;
  }
);

関数として

function getSearchParams(k){
 var p={};
 location.search.replace(/[?&]+([^=&]+)=([^&]*)/gi,function(s,k,v){p[k]=v})
 return k?p[k]:p;
}

次のように使用できます。

getSearchParams()  //returns {key1:val1, key2:val2}

また

getSearchParams("key1")  //returns val1
于 2014-11-04T20:35:20.367 に答える
47

遅すぎるかもしれません。しかし、この方法は非常に簡単でシンプルです

<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="jquery.url.js"></script>

<!-- URL:  www.example.com/correct/?message=done&year=1990 -->

<script type="text/javascript">
$(function(){
    $.url.attr('protocol')  // --> Protocol: "http"
    $.url.attr('path')      // --> host: "www.example.com"
    $.url.attr('query')         // --> path: "/correct/"
    $.url.attr('message')       // --> query: "done"
    $.url.attr('year')      // --> query: "1990"
});

更新
URL プラグインが必要です: plugins.jquery.com/url
ありがとう -Ripounet

于 2015-03-25T10:48:32.930 に答える
39

または、なぜ過度に複雑なソリューションなので、このきちんとした小さな関数を使用できますか?

function getQueryParam(param, defaultValue = undefined) {
    location.search.substr(1)
        .split("&")
        .some(function(item) { // returns first occurence and stops
            return item.split("=")[0] == param && (defaultValue = item.split("=")[1], true)
        })
    return defaultValue
}

単純化してオンライン化するとさらに見栄えが良くなります。

tl;dr ワンライン ソリューション

var queryDict = {};
location.search.substr(1).split("&").forEach(function(item) {queryDict[item.split("=")[0]] = item.split("=")[1]})
結果:
queryDict['sent'] // 未定義または「値」

しかし、エンコードされた文字多値のキーを持っている場合はどうなるでしょうか?

次の回答をよくご覧ください: JavaScript でクエリ文字列の値を取得するにはどうすればよいですか?

スニークピーク

"?a=1&b=2&c=3&d&e&a=5&a=t%20e%20x%20t&e=http%3A%2F%2Fw3schools.com%2Fmy%20test.asp%3Fname%3Dståle%26car%3Dsaab"
> queryDict
a: ["1", "5", "t e x t"]
b: ["2"]
c: ["3"]
d: [undefined]
e: [undefined, "http://w3schools.com/my test.asp?name=ståle&car=saab"]

> queryDict["a"][1] // "5"
> queryDict.a[1] // "5"
于 2015-07-14T16:17:16.503 に答える
10

おそらく、 Dentist JSを見てみたいと思うかもしれません。(免責事項:私はコードを書きました)

コード:

document.URL == "http://helloworld.com/quotes?id=1337&author=kelvin&message=hello"
var currentURL = document.URL;
var params = currentURL.extract();
console.log(params.id); // 1337
console.log(params.author) // "kelvin"
console.log(params.message) // "hello"

Dentist JS では、基本的にすべての文字列 (例: document.URL.extract() ) に対して extract() 関数を呼び出すことができ、見つかったすべてのパラメーターの HashMap を取得できます。区切り文字などを処理するようにカスタマイズすることもできます。

縮小版 < 1kb

于 2014-11-03T00:51:45.167 に答える
5

これはやり過ぎかもしれませんが、URI を解析するためにURI.jsと呼ばれる非常に人気のあるライブラリが利用できるようになりました。

var uri = "http://example.org/foo.html?technology=jquery&technology=css&blog=stackoverflow";
var components = URI.parse(uri);
var query = URI.parseQuery(components['query']);
document.getElementById("result").innerHTML = "URI = " + uri;
document.getElementById("result").innerHTML += "<br>technology = " + query['technology'];

// If you look in your console, you will see that this library generates a JS array for multi-valued queries!
console.log(query['technology']);
console.log(query['blog']);
<script src="https://cdnjs.cloudflare.com/ajax/libs/URI.js/1.17.0/URI.min.js"></script>

<span id="result"></span>

于 2016-02-13T20:28:12.307 に答える
5

これが役立つことを願っています。

 <script type="text/javascript">
   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;
   }

    $(window).load(function() {
      var param = getParameters();
      if (typeof param.sent !== "undefined") {
        // Do something.
      }
    });
</script>
于 2014-01-08T10:01:44.640 に答える
4

この動作デモ http://jsfiddle.net/xy7cX/を試してください

API:

これは役立つはずです:)

コード

var url = "http://myurl.com?sent=yes"

var pieces = url.split("?");
alert(pieces[1] + " ===== " + $.inArray("sent=yes", pieces));
于 2013-10-21T10:00:09.210 に答える
3
http://example.com?sent=yes

ここで最善の解決策。

function getUrlParameter(name) {
    name = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]');
    var regex = new RegExp('[\\?&]' + name + '=([^&#]*)');
    var results = regex.exec(location.href);
    return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, '    '));
};

上記の関数を使用すると、個々のパラメーター値を取得できます。

getUrlParameter('sent');
于 2018-09-19T16:14:15.570 に答える
3

この素晴らしいライブラリがあります: https://github.com/allmarkedup/purl

これにより、簡単に行うことができます

url = 'http://example.com?sent=yes';
sent = $.url(url).param('sent');
if (typeof sent != 'undefined') { // sent exists
   if (sent == 'yes') { // sent is equal to yes
     // ...
   }
}

この例では、jQuery を使用していると想定しています。プレーンな JavaScript と同じように使用することもできますが、構文は少し異なります。

于 2015-03-23T20:50:58.560 に答える
2

これにより、作業に適したオブジェクトが得られます

    function queryParameters () {
        var result = {};

        var params = window.location.search.split(/\?|\&/);

        params.forEach( function(it) {
            if (it) {
                var param = it.split("=");
                result[param[0]] = param[1];
            }
        });

        return result;
    }

その後;

    if (queryParameters().sent === 'yes') { .....
于 2014-08-22T05:19:52.523 に答える
1

Sameerの回答のCoffeescriptバージョン

getUrlParameter = (sParam) ->
  sPageURL = window.location.search.substring(1)
  sURLVariables = sPageURL.split('&')
  i = 0
  while i < sURLVariables.length
    sParameterName = sURLVariables[i].split('=')
    if sParameterName[0] == sParam
      return sParameterName[1]
    i++
于 2015-03-06T17:15:12.583 に答える
1

確かに、過剰回答の質問に回答を追加していますが、これには次の利点があります。

-- jQuery を含む外部ライブラリに依存しない

-- 'String' を拡張することにより、グローバル関数の名前空間を汚染しない

-- グローバル データを作成せず、一致が見つかった後に不要な処理を行う

-- エンコードの問題を処理し、エンコードされていないパラメーター名を (想定して) 受け入れる

for-- 明示的なループの回避

String.prototype.urlParamValue = function() {
    var desiredVal = null;
    var paramName = this.valueOf();
    window.location.search.substring(1).split('&').some(function(currentValue, _, _) {
        var nameVal = currentValue.split('=');
        if ( decodeURIComponent(nameVal[0]) === paramName ) {
            desiredVal = decodeURIComponent(nameVal[1]);
            return true;
        }
        return false;
    });
    return desiredVal;
};

次に、次のように使用します。

var paramVal = "paramName".urlParamValue() // null if no match
于 2016-07-30T19:37:53.050 に答える
1

私はこれを使用していますが、うまくいきます。 http://codesheet.org/codesheet/NF246Tzs

function getUrlVars() {
    var vars = {};
    var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) {
    vars[key] = value;
    });
return vars;
}


var first = getUrlVars()["id"];
于 2016-02-13T22:29:26.883 に答える
-1
$.urlParam = function(name) {
  var results = new RegExp('[\?&amp;]' + name + '=([^&amp;#]*)').exec(window.location.href);
  return results[1] || 0;
}
于 2014-11-18T09:39:32.290 に答える
-1

これを使って

$.urlParam = function(name) {
  var results = new RegExp('[\?&amp;]' + name + '=([^&amp;#]*)').exec(window.location.href);
  return results[1] || 0;
}
于 2015-04-24T09:16:28.843 に答える