我有一个Greasemonkey脚本,可以跟踪unicreatures.com
上的不同内容。
我想要计算的一件事是点击页面上的某些链接,但不是所有链接。
这些需要计算,
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=
的不同值使用十亿个if语句,而且我找不到将一个变量添加到正则表达式的方法。
所以我终于找到了一些字符串操作命令并将它们放在一起:
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 :(得分:1)
尝试调整你的正则表达式版本,而不是:
if ( /area=sea(?!\&gather)/.test( link.href )) {
使用此正则表达式:
if ( /area=(\w*)&id=/.test( link.href )) {
将匹配所有包含'area'参数后跟'id'参数的链接,该参数似乎足以匹配您想要的链接。
答案 1 :(得分: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 );
}
}