2012-01-09 3 views
3

は、私はこのようなテーブルを持っている:ループを使用せずにHTMLテーブルの列を強調表示するにはどうすればよいですか?

<table> 
    <thead> 
    <tr> 
    <th id="col-1"><input type="button" class="some" value="Company" /></th> 
    <th>name</th> 
    <th>Adress</th> 
    <th>Zip</th> 
    <th>Place</th> 
    <th>Country</th> 
    </tr> 
    </thead> 
    <tbody> 
    <tr class="even"> 
    <td headers="col-1">Some ltd</td> 
    <td>some name</td> 
    <td>some street</td> 
    <td>some zip</td> 
    <td>some town</td> 
    <td>some country</td> 
    </tr> 
    <tr class="odd"> 
    <td headers="col-1">Corp</td> 
    <td>some name</td> 
    <td>some street</td> 
    <td>some zip</td> 
    <td>some town</td> 
    <td>some country</td> 
    </tr> 
    </tbody> 
</table> 

奇数と偶数行は異なるハイライトクラスoddHighevenHighを持っています。私はこのような列を強調表示したい列のヘッダーのクリックで

$(".some").live("click", function() { 
    var val = $(this).closest("TH, th").attr('id'), 
     col = $("td[headers="+ val +"]"), 
     // set odd/even 
     i = col.closest("TR, tr").hasClass("odd") ? "oddHigh" : "evenHigh"; 

    col.hasClass("colHigh") ? col.removeClass("colHigh "+i) : col.addClass("colHigh "+i); 
    }); 

これはoddHighと列全体を強調表示します。

選択範囲全体をループせずに最も近い行のクラスに応じて強調表示する方法はありますか?それとも私がcolOdd tr.oddのTD ...colEven tr.even TD ...とは、2つの別々のステートメントを使用からに設定する必要がありますか?

+0

私はあなたがループなしで逃げることはできませんが、あなたは 'jquery.each'メソッドを使ってコードを単純化するかもしれません。 –

答えて

5

ご使用のブラウザでサポートされている場合は、css :even:odd css擬似クラスセレクタを使用できます。また

tr:nth-child(odd) 

tr:nth-child(even) 

は、互換性のためにhttp://caniuse.com/#search=nth-childを参照してください。 (no IE 6,7,8)

+0

ええ、私もこれについて考えました。しかし、それはIE7,8をカバーする必要があるので、誰かがループのない別の解決策を思いつくなら、もう少し長く待つでしょう。そうでなければ、小切手を受け取る。今のところThx。その場合は – frequent

+0

とすると、$( 'input.some:nth-​​child(odd)')のようにすることで簡単にすることができます。toggleClass( 'oddHigh');偶数クラスに似ていますか? – c4urself

3

:even:odd jQuery疑似セレクタを参照してください。 :D

関連する問題