如果在查询字符串中找到匹配,有没有办法获得布尔结果?

时间:2014-02-20 23:30:16

标签: javascript variables url

使用javascript可以从URL获取变量。像这样:

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];}
       }
       return(false);
}

网址是http://www.example.com/index.php?id=1&image=pic.jpg,然后调用getQueryVariable("id")返回1getQueryVariable("image")返回pic.jpg

我想知道一种利用布尔变量的方法。我希望函数返回truefalse是变量存在。因此,使用网址http://www.example.com/index.php?id调用getQueryVariable("id")会返回true。如果?id不存在,那么我希望它返回false

此特定功能来自CSS-Tricks


我正在使用这个我没写过的功能,我担心我不理解它,也不记得它来自哪里:

function getUrlVar(key){
    var result = new RegExp(key + "=([^&]*)", "i").exec(window.location.search); 
    return result && unescape(result[1]) || ""; 
}

3 个答案:

答案 0 :(得分:1)

如果vars[i]不包含=pairs将只包含一个元素。在这种情况下,pair[1]将返回undefined。解决这个问题的一个简单方法就是改变这个:

if(pair[0] == variable){return pair[1];}

对此:

if(pair[0] == variable){return pair.length == 1 || pair[1];}

因此,如果url参数与?id类似,则返回值为true,否则为=符号后面的值。

答案 1 :(得分:0)

我认为最好通过以下方式将URL路径的查询部分转换为关联数组:

function createQuerySlots() {
  var query = window.location.search.substring(1);
  var querySlotsAsStrings = query.split("&");
  var querySlotArray = [];
  var querySlots = {};
  for (var i=0; i < querySlotsAsStrings.length;i++) {
    querySlotArray = querySlotsAsStrings[i].split("=");
    querySlots[querySlotArray[0]] = querySlotArray[1];
  }
  return querySlots;
}  

然后,您可以检索查询变量值:

querySlots = createQuerySlots();
value = querySlots.variable;

您可以测试是否存在(布尔)变量:

value = ("id" in querySlots);

答案 2 :(得分:0)

您可以按如下方式修改功能:

function getQueryVariable(variable){
   var query = window.location.search.substring(1),
       vars = query.split("&");
   for (var i=0;i<vars.length;i++) {
           var pair = vars[i].split("=");
           if(pair[0] == variable){
             return true; // return true if match found
           }
   }
   return false; // no match found
}