【问题标题】:Is there a way to get boolean result if match is found in query string?如果在查询字符串中找到匹配项,有没有办法获得布尔结果?
【发布时间】:2014-02-20 23:30:16
【问题描述】:

使用 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);
}

URL 是否显示http://www.example.com/index.php?id=1&amp;image=pic.jpg,然后调用getQueryVariable("id") 返回1getQueryVariable("image") 返回pic.jpg

我想知道一种利用布尔变量的方法。如果变量存在,我希望函数返回 truefalse。因此,使用 URL 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]) || ""; 
}

【问题讨论】:

  • 我想知道为什么会有一个接近的投票?

标签: javascript variables url


【解决方案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,否则就是=符号后面的值。

【讨论】:

  • @Bergi 哎呀,是的,感谢您指出这一点。 (我最初想的是pair.length &gt; 1 &amp;&amp; pair[1] 之类的东西,但对于'bool' 值参数,它会返回false)。
【解决方案2】:

我认为最好将 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);

【讨论】:

    【解决方案3】:

    你可以修改函数如下:

    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
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多