检查 URL 是否使用 JavaScript 传递变量

Check if URL pass variable using JavaScript

本文关键字:变量 JavaScript URL 是否 检查      更新时间:2023-09-26

如何检查URL是否包含变量?我有这样的功能

我的第二个问题是,假设 URL 已经传递了 lang 变量,像这样(http://index.php?id=23&lang=en)

我希望当他们再次运行此函数时,它将 lang 变量替换为新的 on 而不是像这样添加新的 lang 变量(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 ;
}

window.location 实际上是一个对象,它有一个"search"属性,可以更轻松地解析查询字符串。

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

问题可能是正则表达式中缺少"?"的转义:

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

更短一点的是:

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

您可能希望之前清理任何参数"lang",这样它就不会因多次出现而成为数组。

最好像这样重新组装网址

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

这是使用正则表达式的另一种解决方案:

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

您可以简单地使用indexOf()方法来实现此目的

if(window.location.href.indexOf("your value") != -1) {
     alert("It contains");
 }
 else {
    alert("Nope");
 }
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 ;
                }
            }
        }