jQuery.expr[":"].le = function(elem,i,match){
return elem.rowIndex < match[3] - 0 || elem.rowIndex == match[3] - 0;
};
jQuery.expr[":"].ge = function(elem,i,match){
return elem.rowIndex > match[3] - 0 || elem.rowIndex == match[3] - 0;
};
//书上说第二个参数i表示当前BOM元素对象在所有匹配元素中的索引位置,从0开始。但我测试时一直得到的都是0.所以改成elem.rowIndex
//第三个参数表示正则表达式执行匹配后的返回的数组对象
match:{
POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/
}
/**
其中()是捕获组
捕获组是把多个字符当一个单独单元进行处理的方法,它通过对括号内的字符分组来创建。
例如,正则表达式 (dog) 创建了单一分组,组里包含"d","o",和"g"。
捕获组是通过从左至右计算其开括号来编号。例如,在表达式((A)(B(C))),有四个这样的组:
((A)(B(C)))
(A)
(B(C))
(C)
可以通过调用 matcher 对象的 groupCount 方法来查看表达式有多少个分组。groupCount 方法返回一个 int 值,表示matcher对象当前有多个捕获组。
还有一个特殊的组(group(0)),它总是代表整个表达式。该组不包括在 groupCount 的返回值中。
(?:pattern)
匹配 pattern 但不捕获该匹配的子表达式,即它是一个非捕获匹配,不存储供以后使用的匹配。这对于用"or"字符 (|) 组合模式部件的情况很有用。
例如,'industr(?:y|ies) 是比 'industry|industries' 更经济的表达式。
(?=pattern)
执行正向预测先行搜索的子表达式,该表达式匹配处于匹配 pattern 的字符串的起始点的字符串。
它是一个非捕获匹配,即不能捕获供以后使用的匹配。例如,'Windows (?=95|98|NT|2000)' 匹配"Windows 2000"中的"Windows",
但不匹配"Windows 3.1"中的"Windows"。预测先行不占用字符,即发生匹配后,下一匹配的搜索紧随上一匹配之后,而不是在组成预测先行的字符后。
var str = "#bomRowBodyLeft tr:lt(3)";
var patt1 = /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/;
document.write(str.match(patt1));
运行结果::lt(3),lt,3
*/
$(function(){
$("#bomRowBodyLeft tr:le(3)").css("color","red");
$("#bomRowBodyLeft tr:ge(3)").css("color","blue");
});
另一种写法:
jQuery.extend(jQuery.expr[":"],{
le : function(elem,i,match){
return elem.rowIndex < match[3] - 0 || elem.rowIndex == match[3] - 0;
}
});
jQuery.extend(jQuery.expr[":"],{
ge : function(elem,i,match){
return elem.rowIndex > match[3] - 0 || elem.rowIndex == match[3] - 0;
}
});
运行效果: