2012-09-12 126 views
1

我有一個Greasemonkey腳本,用於跟蹤unicreatures.com上的不同事物。與if語句混淆錯誤

我想要統計的一件事是點擊頁面上的一些鏈接,但不是所有鏈接。

這些都需要計算在內, http://unicreatures.com/explore.php?area=sea&id=89&key=bf12 這些不應該算作, http://unicreatures.com/explore.php?area=sea&gather=5&enc=394844&r=

有人幫我找出一個正則表達式是做了什麼,我想,但我不得不給每個不同的探索位置(area=**)編碼到它,所以我決定不起作用。

的正則表達式版本

var links = document.getElementsByTagName('a'); 

for (var i = 0; i < links.length; i++) { 
var link = links[i]; 
if (/area=sea(?!\&gather)/.test(link.href)) { 
    link.addEventListener('click', function() { 
localStorage.steps=Number(localStorage.steps)+1 
     // alert(localStorage.steps + ' in Sargasso'); 
    }, true); 
} 
} 

很顯然,我不想要一個十億如果的area=不同值的語句,我無法找到一個方法來添加一個變量到正則表達式。

所以,我終於找到了一些字符串操作命令,並放在一起這樣:

var url = window.location.href; 
var startOf=url.indexOf("=")+1; 
var endOf=url.indexOf("&"); 
var loc =url.substring(startOf,endOf); 

var links = document.getElementsByTagName('a'); 

for (var i = 0; i < links.length; i++) { 
var link = links[i]; 
if (url.indexOf("area=")>=0 && url.indexOf("gather=")<0) { 
    link.addEventListener('click', function() { 
localStorage.steps=Number(localStorage.steps)+1 
localStorage[loc+"Steps"]=Number(localStorage[loc+"Steps"])+1 
     alert(localStorage[loc+"Steps"] +" in local"+loc); 
    }, true); 
} 
} 

出於某種原因,即使第二個條件是虛假它計數。這是一個簡單的例子,我得到的語法錯誤的地方,或者這是一個Greasemonkey錯誤?我在控制檯中沒有任何錯誤。

+0

不應該這是'url.indexOf(「gather =」)<0'? –

+0

其實你是對的...我會嘗試...但是因爲它應該返回-1,即使它是'== - 1'或'=== - 1'我不知道這是否會有所幫助....測試這個腳本腳本讓我收集了至少20個雞蛋,我不想要到目前爲止大聲笑 –

+0

@BGR Nope仍然計算蛋點擊以及步驟... argggg ,但我改變了這個問題,因爲這是一個很好的觀點。 –

回答

1

儘量只調整你的正則表達式版本,而不是這樣的:

if (/area=sea(?!\&gather)/.test(link.href)) { 

使用這個表達式:

if (/area=(\w*)&id=/.test(link.href)) { 

,將匹配有一個「區域」參數後面的'的鏈接id'參數,這似乎足以匹配你想要的鏈接。

+0

請注意,這個答案也檢查'link.href'的正則表達式,我很確定這是OP想要的。重新檢查'url'將會在任何給定的頁面上始終給出相同的結果。 – bdesham

+0

url是我定義的變量,只有這樣我才能使'indexOf()'工作,這不是一個有效的變量名嗎? –

+0

謝謝,這工作!雖然我仍然不知道爲什麼我的其他代碼無法正常工作......我仍然對regexp感到困惑......我看到的網站上說'\ w'匹配任何字符......你們怎麼會得到它匹配一個詞? –

1

預過濾鏈接並測試link.href而不是url - 它被設置爲前一代碼的頁面地址。

var linksWithArea = document.querySelectorAll ("a[href*='area=']"); 

for (var J = linksWithArea.length - 1; J >= 0; --J) { 
    var link  = linksWithArea[J]; 
    if (! /gather=/i.test (link.href)) { 
     link.addEventListener ('click', function() { 
      localStorage.steps   = Number(localStorage.steps) + 1; 
      localStorage[loc+"Steps"] = Number(localStorage[loc+"Steps"]) + 1; 
      alert(localStorage[loc+"Steps"] +" in local"+loc); 
     }, true); 
    } 
} 
+0

DUH!爲什麼我沒有看到?!!!是的,'url'是我定義的變量**和頁面地址!!! **所以我接受你的答案或另一個答案,因爲它指出在評論中,我仍然沒有得到它? –

+0

Upvote並接受任一個。他需要更多的分數。 –

+0

非常感謝... ADHD再次提起 –