2012-02-14 15 views
2

配列をeq関数にパラメータとして渡したいと思います。そのような:jquery配列をeq関数

$(this).find('tr').not(':eq(array)').each(function(){ 

}); 

私はループとeval機能を使用してこれをしなかったが、それは簡単に編集可能に見えません。これは私のコードです。

$.fn.grilestir = function(options){ 

var nots = ''; 

for(var i=0;i<options.row_numbers.length;i++){ 
    nots += "not(':eq("+options.row_numbers[i]+")')."; 
} 

    eval("$(this).find('tr')."+nots+"each(function(){\ 
     var tr = $(this); var orj;\ 
     if(options.mod == 'passive-rows'){\ 
      $(this).mouseover(function(){\ 
       orj = tr.css('backgroundColor');\ 
       tr.css('backgroundColor', '#777777');\ 
      });\ 
      $(this).mouseout(function(){\ 
       tr.css('backgroundColor', orj); \ 
      });\ 
     }\ 
    });"); 

} 

これを行う方法はありますか?

+0

それはjQueryのオブジェクトの配列だ場合、あなただけの '.NOT(配列)'行うことができます。あなたの配列にはどのようなデータが入っていますか?さて、 'eval()'を使うのは良い考えではありません。 – Bojangles

+0

ewww eval is evil – mcgrailm

答えて

4

あなたの配列に要素インデックスを表す一連の数字が含まれていると仮定しています。 eqセレクタはそれで動作しません。

あなたは配列内のインデックスにあるものに要素のマッチしたセットを減らすためにfilterを使用することができます。

var arr = [1, 2]; 
$("someSelector").filter(function(index) { 
    return arr.indexOf(index) > -1; 
}); 

はここworking exampleです。

Array.prototype.indexOfの使用に注意してください。これは古いブラウザ(注目のIE <バージョン9)では利用できません。しかし、その問題を解決するために利用可能なシムがたくさんあります。 あるいはは、コメント(おかげ@mcgrailm)で述べたように、あなたはjQuery.inArrayを使用することができます。

var arr = [1, 2]; 
$("someSelector").filter(function(index) { 
    return $.inArray(index, arr) > -1; 
}); 
+0

+1とても素敵な方法があったと思っていました。 – mcgrailm

+0

jQueryのinArray()関数は古いバージョンをカバーできますか? – mcgrailm

+0

@mcgrailm - 確かに可能です。私はその有用な小さな事を常に忘れています! –