2011-08-01 8 views
1

私はここに新しいです、私が欲しいものに似たような答えは見つかりません。私は進歩を遂げ、さらに進むことはできません。以下は私のスナップされた、それは私が2番目と最後のTRの間にマウスをかざすと色が変わります。 (最初のTRはタイトルであり、最後のTRはフッタです)。ホバリング可能な範囲の間に、それを選択するには2番目のTDと2番目の最後のTDだけを含めることができます。jqueryのホバーの範囲

$('table#tblSchoolList tr:gt(0)').hover(function(){ 
    ////and not the last child (.next length = 0 means last) 
    if ($(this).next().length != 0){ 
     $(this).css("background", "red"); 
    } 
}, function(){ 
    $(this).css("background", ""); 
}) 

要するに、テーブルホバーは最初と最後のTRとTDを除外します。

TIA。

+1

場合は、色を変更するだけで意味するかあなたのjQueryのソリューションを維持することができますあなたが行を動かすとき、各行の2番目と最後の2番目のセル? – BoltClock

+0

上記のコードは、あなたが要件を記述したときに働いてくれました(最初と最後の間のすべてのtrを強調表示します)。http://jsfiddle.net/cK8Q5/1/ –

+0

はいBoltClockを参照してください。 Ken Redlerはtr範囲の選択を改善しましたが、私の質問は解決しません。セルの数は動的で、概念はtrと同じで、最初と最後のセルではありません。 – Gian

答えて

2
:ここ

$('#foo tr').slice(1,-1).hover(function(){ 
    $(this).find('td').slice(1,-1).toggleClass('highlight'); 
}); 

は非常に簡単な例です

.find()を次のセレクタとともに使用して、それぞれtdをそれぞれtrにすることができます。

$('table#tblSchoolList tr:gt(0)').hover(function() { 
    if ($(this).next().length != 0) { 
     $(this).find('td:not(:first-child, :last-child)').css("background", "red"); 
    } 
}, function() { 
    $(this).find('td:not(:first-child, :last-child)').css("background", ""); 
}); 

マウスが最初と最後のtdの上にある場合でもこの関数はトリガーされますが、色付けされません。

jsFiddle demo

また、if文のための必要性を取り除く、あなたのtr秒でセレクタを使用することができます。少しグッディとして


$('table#tblSchoolList tr:not(:first-child, :last-child)').hover(function() { 
    $(this).find('td:not(:first-child, :last-child)').css("background", "red"); 
}, function() { 
    $(this).find('td:not(:first-child, :last-child)').css("background", ""); 
}); 
が、私は変換することができました気づきましたすべてのjQueryコードを CSSルール(最新のブラウザでのみ動作):

table#tblSchoolList tr ~ tr:not(:last-child):hover td ~ td:not(:last-child) { 
    background: red; 
} 

もちろん、あなたは常にあなたが古いブラウザとの互換性を必要以上にCSSが何を意味するのかを把握することはできません:)

jsFiddle demo

+1

re:CSSのみの解決策 - あなたは病気、病気、人です;-) – Alnitak

+0

あなたの情報をありがとう。知っておきたいことは、CSSのルールもそのように機能することです。 – Gian

2

あなたはこのように、sliceを使用してみてください:負の数を使用して

$('table#tblSchoolList tr').slice(1,-1).hover(function(){ 
    $(this).css("background", "red"); 
}, function(){ 
    $(this).css("background", ""); 
}); 

は、リストの末尾からのオフセットを指定します。だから、:

slice(
    1, // omit first row 
    -1 // omit last row 
) 

以上単に:

$('table#tblSchoolList tr').slice(1,-1).hover(function(){ 
    $(this).toggleClass('highlight'); 
}); 

(あなたは色の動作を処理するためにhighlightクラスを持っていると仮定した場合)。


編集:は、その最初と最後の列だけでなく、行を確保するために更新、強調表示されません(感謝の@boltclock): http://jsfiddle.net/redler/Mgd8f/

+0

「スライス」と「トグルクラス」の+1 –

+0

だから、 'td'sはどうですか?あなたがやっているのは、OPがすでに持っているものをリファクタリングすることだけです。 – BoltClock

+0

@BoltClock、そうです。それを逃した。改訂する。 –