2011-12-09 13 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()のように、指定されたアイテムのみが保持されます。 3番目のパラメータは、指定された項目が削除されたものになるようにフィルタを元に戻すことができます。OPはその!=構文で要求されたものです。

により自動型変換の不思議に、これは数値として渡された値を用いて次のようにも使用することができる。

$(".aaa").filterAttribute("row", [1, 2, 3], true) 
関連する問題