2011-12-09 65 views

回答

2

不,沒有辦法以這種方式結合不相等的選擇器。結果將被解釋爲字符串'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) 
2

如果你必須這樣做了很多,沒有更好的辦法通過附加適當的班排等基團來解決這個問題,那麼你可以寫一個簡短的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) 
相關問題