2012-08-05 169 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); 
相關問題