我現在有一個選擇,看起來像這樣:更簡單的方法來編寫多個「不等於」屬性選擇器?
$("span[row!='2'][row!='5'][row!='1']");
有沒有寫這個更簡單的方法?我試過但它沒有工作:
$("span[row!='1,2,5']");
我現在有一個選擇,看起來像這樣:更簡單的方法來編寫多個「不等於」屬性選擇器?
$("span[row!='2'][row!='5'][row!='1']");
有沒有寫這個更簡單的方法?我試過但它沒有工作:
$("span[row!='1,2,5']");
不,沒有辦法以這種方式結合不相等的選擇器。結果將被解釋爲字符串'1,2,3'
而不是單個值。你將不得不枚舉案例。
雖然你可以寫一個函數來使這個寫起來更容易。例如
var makeNotEquals = function(name) {
var clause = '';
for (var i = 1; i < arguments.length; i++) {
clause = clause + '[' + name + '!=\'' + arguments[i] + '\']';
}
return clause;
}
使用
var selector = 'span' + makeNotEquals('row', 2, 1, 5);
$(selector)
如果你必須這樣做了很多,沒有更好的辦法通過附加適當的班排等基團來解決這個問題,那麼你可以寫一個簡短的jQuery插件,你可以通過行號的數組是這樣的:
$("span[row]").filterAttribute("row", ['1','2','5'], true)
這是一個實現:
$.fn.filterAttribute = function(attr, values, reverse) {
var remaining = [];
this.each(function(index, el) {
for (var i = 0; i < values.length; i++) {
if (el.getAttribute(attr) == values[i]) {
remaining.push(el);
break;
}
}
});
if (reverse) {
return(this.not(remaining));
} else {
return($(remaining));
}
}
你可以看到它在這裏工作:http://jsfiddle.net/jfriend00/WwrSY/
注意,這個插件的正常運行是過濾從jQuery對象項目,使不符合項被刪除,返回一個新的jQuery對象與指定的項目作爲唯一的保存(像jQuery的.filter()
作品。第三個參數可以反轉過濾器,以便指定的項目將被刪除,不保留,這是OP用它們的!=語法所要求的。
由於自動類型轉換的奇蹟,這也可以像這樣使用同爲數字傳遞的值:
$(".aaa").filterAttribute("row", [1, 2, 3], true)