2012-08-05 177 views
1

在问题how to check if the url contains a given string. Javascript/jquery 答案检查url是否包含给定的字符串。我想扩展它来检查它是否包含两件事情。name = franky & & gender = male。我试图如何检查url是否包含多个字符串。 Javascript/jquery

if(window.location.href.indexOf("name=franky" && "gender=male") > -1) 

这似乎开始工作,但进一步的测试,我发现它似乎工作如果只是名字或性别的一个存在。我在哪里错了?

回答

7

您可以将它分成两部分,并调用indexOf两次,而不是在同一个调用中检查两个字符串。类似这样的:

if(window.location.href.indexOf("name=franky") > -1 && 
    window.location.href.indexOf("gender=male") > -1) 
+0

+1因为我把你的答案加倍了。 – nnnnnn 2012-08-05 22:35:30

+0

我最初尝试过这样的东西,但没有完全正确的语法。 – ak85 2012-08-05 22:41:25

5

.indexOf()函数只查找单个字符串。为了测试两个字符串需要两次调用.indexOf()按照克里斯托弗的回答是:

if(window.location.href.indexOf("name=franky") > -1 && 
    window.location.href.indexOf("gender=male") > -1) 

我张贴的答案也就是简单介绍一下如何&&运营商运作的原因:鉴于expr1 && expr2,该&& operator“返回expr1如果它可以转换为false;否则返回expr2。“

“转换为false”是什么意思?基本上nullundefined0,NaN""(空字符串)是“虚假”,将被“转换为false”。非零数字,非空字符串和任何对象都是“真”,并且将被转换为真。

这时候,你说"name=franky" && "gender=male"&&操作者测试的第一个操作数是指,发现(这种情况下),它不能被转换为false,那么它将返回"gender=male"。所以,你的代码似乎工作一些时间的原因是,实际上它是这样:

if(window.location.href.indexOf("gender=male") > -1) 
+0

用于说明1。我正准备发表评论。 – Kiruse 2012-08-05 22:31:42

+0

+1延长我的简短回答。 – 2012-08-05 22:48:15

3

另一种通用的方法

function CheckIfAllQueryStringsExist(url, qsCollection) { 
    for (var i = 0; i < qsCollection.length; i++) { 
     if (url.indexOf(qsCollection[i]) == -1) { 
      return false; 
     } 
    } 
    return true; 
} 

这样称呼它。

var myUrl = window.location.href; 
var queryStrings = ["name=franky", "gender=male"]; 
var allPresent = CheckIfAllQueryStringsExist(myUrl, queryStrings); 
相关问题