0

URLに変数が含まれているかどうかを確認するにはどうすればよいですか? 私はこのような私の機能を持っています

私の 2 番目の問題は、URL が既に lang 変数を渡しているとしましょう ( http://index.php?id=23&lang=en ) のようなものですこのように新しい lang 変数を追加する代わりに new on ( http://index.php?id=23&lang=en&lang=jp )

function menu_goto(newvalue)
{
var baseurl = window.location.href ;

var langwithpara = "&lang=" + newvalue;
var langwopara = "?lang=" + newvalue;

    if (newvalue != 0) {
        if(baseurl.match(/?/)){
        alert ('123');
        location.href = baseurl + langwithpara ;
        }
        else{
        alert ('456');
        location.href = baseurl + langwopara ;
        }
    }
}

私の新しいコーディング (作業)

function menu_goto(newvalue)
{
  var baseurl = window.location.href ;
  var url = baseurl + ( (baseurl.match(/\?/))? '&':'?' ) + 'lang=' + newvalue;

  location.href = url ;
}
4

4 に答える 4

1

window.location は実際にはオブジェクトであり、クエリ文字列の解析を容易にする「検索」プロパティがあります。

function getParam(param){
    var qs = window.location.search.substring(1).split('&');
    var qsp;
    for (p in qs){
        qsp = qs[p].split('=');
        if (qsp[0] == param) return qsp[1]; 
    }
    return null;
}

特定のパラメータを確認するには:

var value = getParam('name');
于 2013-09-25T04:07:11.580 に答える
0

indexOf()これにはメソッドを使用するだけです

if(window.location.href.indexOf("your value") != -1) {
     alert("It contains");
 }
 else {
    alert("Nope");
 }
于 2013-09-25T04:03:52.133 に答える
0
function menu_goto(newvalue)
        {
        var baseurl = window.location.href ;
        var langwithpara = "&lang=" + newvalue;
        var langwopara = "?lang=" + newvalue;

            if (newvalue != 0) {
                if(baseurl.match(/\?/)){ // change /?/ to /\?/
                alert('123');
                location.href = baseurl + langwithpara ;
                }
                else{
                alert('456');
                location.href = baseurl + langwopara ;
                }
            }
        }
于 2013-09-25T04:05:34.390 に答える
0

問題はおそらく "?" のエスケープがないことです。あなたの正規表現で:

if (baseurl.match(/\?/)) { // ...

少し短くなります:

var url = baseurl + ( (baseurl.match(/\?/))? '&':'?' ) + 'lang=' + newvalue;

おそらく、前に任意のパラメータ「lang」を消去して、複数回出現しても配列にならないようにする必要があります。

のようにURLを新たに組み立てたほうがいいかもしれません

function menu_goto(newvalue) {
    var params = {};
    if (self.location.search) {
      var pairs = self.location.search.substring(1).split("&"); // skip the "?"
      for (var i = 0; i < pairs.length; i++) {
        var parts = pairs[i].split('=');
        params[parts[0]] = parts[1];
      }
    }
    params.lang = newvalue;
    var query = new Array();
    for (var p in params) query.push(p + '=' + params[p]);
    var url = self.location.protocol + '//' + self.location.host + self.location.pathname
              + '?' + query.join('&');

    self.location.href = url;
}

RegExps を使用したさらに別のソリューションを次に示します。

function menu_goto2(newvalue) {
    var url = self.location.href;
    url = url.replace(/#.*/, ''); // clean any hash at end
    url = url.replace(/[&\?]lang=[^&]*/, ''); // clean any param lang and its value
    // we might have had two or more params and "lang" was the first one
    // then we might have lost the "?" => replace first "&" by "?"
    if (url.indexOf('?') < 0 && url.indexOf('&') >= 0) url = url.replace(/&/, '?');
    url += ( url.match(/\?/)? '&':'?') + 'lang=' + newvalue; // add the new param lang
    self.location.href = url;
}

これは次のように短縮できます

function menu_goto3(newvalue) {
    var url = self.location.href.replace(/#.*/, '').replace(/[&\?]lang=[^&]*/, '');
    if (url.indexOf('?') < 0 && url.indexOf('&') >= 0) url = url.replace(/&/, '?');
    url += ( url.match(/\?/)? '&':'?') + 'lang=' + newvalue;
    self.location.href = url;
}
于 2013-09-25T04:05:52.910 に答える