jQuery 自定義選擇器 於大等於和小於等於
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;
}
});
執行效果: