如何检查url是否包含多个字符串。 使用Javascript / jQuery的

在如何检查url是否包含给定字符串的问题中。 Javascript / jquery答案检查url是否包含给定的字符串。 我想扩展它以检查它是否包含两个名称= franky && gender = male。 我试过了

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

这似乎最初起作用,但经过进一步的测试,我发现如果只有一个名称或性别存在,它似乎有效。 我在哪里错了?

您可以将其分成两部分并调用indexOf两次,而不是尝试在同一个调用中检查两个字符串。 像这样的东西:

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

.indexOf()函数只查找单个字符串。 要测试两个字符串,根据Christofer的答案,您需要两次调用.indexOf()

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

我发布答案的原因是简要解释&&运算符的工作原理:给定expr1 && expr2&&运算符 如果可以转换为false则 返回 expr1 ;否则返回 expr2 。”

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

这意味着当你说"name=franky" && "gender=male"&&运算符测试第一个操作数,发现(在这种情况下)它不能转换为false,因此返回"gender=male" 。 所以你的代码似乎在某些时候工作的原因是它实际上是这样做的:

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

另一种通用方法

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