-1

これが私の便利でダンディなコード行です。

$('#options th.subhead').each(function(){$(this).parents('table').find('td:nth-child('+$(this).prevAll().length+')').andSelf().toggle();});

さて...理論的には、これがすべきことは、オプションとしてidされたテーブル内のクラス「サブヘッド」を使用して、同じ列の任意のtdを見つけて切り替えることであると考えました。ああ、元の th と同様に。

何だと思う。テーブルの内容全体を消去して返します。

ここで何かが欠けています。「これ」は私が preVall を行っている場所であり、長さはもはや私が考えていることではありませんか?

アップデート!wirey は彼のコメントで私に近づきました。

私は今ここにいます:

$('#options th.subhead').each(function(){$(this).parents('table').find('td:nth-child('+$(this).prevAll().length+')').toggle();}).toggle();

これは、間違った td を隠していることを除いて、うまく機能します。最初の列は 1 列、次の 2 列は正しい、最後の列は 1 列左にあるようです。笑

更新 2.5 (URL が悪いため):

フィドルを作りました http://jsfiddle.net/MatthewDavis/8nTXB/1/

更新 3 Wirey のおかげでわかりました。これが最後のフィドルです! http://jsfiddle.net/MatthewDavis/8nTXB/2/

そして完成したコード行。

$('#options th.subhead').each(function () {
    $(this).parents('table').find('td:nth-child(' + ($(this).prevAll().length+1) + ')').toggle();
}).toggle();
4

1 に答える 1

1

これがあなたの間違いです

$('#options th.subhead').each(function(){
    $(this) // <-- you're at the th level
    .parents('table') // <-- now your at the table level
    .find('td:nth-child('+$(this).prevAll().length+')') // you traversed down
    .andSelf() // <-- this says add the previous element in the stack which is the table
    .toggle(); // here you are toggling the tds and the table
});

このように試してください-テストされていません

$('#options th.subhead').each(function(){
    $(this) // <-- you're at the th level
    .parents('table') // <-- now your at the table level
    .find('td:nth-child('+$(this).prevAll().length+')') // you traversed down
    .end()  // <-- now back at the table level in the stack
    .andSelf() // <-- this says previous elements in the stack which is the TH
    .toggle(); // here you are toggling the th and tds
});

参考までに、jQuery 1.8 以降を使用している場合は、.andSelf() が廃止されたため、代わりに.addBack()を使用する必要があります。

編集

:nth-childは 1-indexed であり、zero-inexed ではないため、prevAll().length に 1 を追加する必要があります

$('#options th.subhead').each(function () {
  $(this).parents('table').find('td:nth-child(' + ($(this).prevAll().length+1) + ')').toggle();
}).toggle();
于 2013-01-28T21:40:58.233 に答える