1

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

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

最初似乎有效,但经过进一步测试,我发现如果只有姓名或性别之一存在,它似乎有效。我在哪里错了?

4

3 回答 3

8

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

if(window.location.href.indexOf("name=franky") > -1 && 
    window.location.href.indexOf("gender=male") > -1)
于 2012-08-05T22:12:55.090 回答
5

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

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

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

“转换为假”是什么意思?基本上null, undefined, 0, NaNand ""(empty string) 是“假的”,将被“转换为假”。非零数字、非空字符串和任何对象都是“真实的”,并将被转换为真实。

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

if(window.location.href.indexOf("gender=male") > -1)
于 2012-08-05T22:30:29.453 回答
4

另一种通用方法

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);
于 2012-08-05T22:37:01.357 回答