2012-03-17 6 views
0

imは、挿入された行を "newrow"クラスのテーブルに隠そうとしています。jqueryがクラスを行間で非表示にする

通常の行には、これらの新しい行が追加される追加ボタンがあります。ボタンをクリックしたときにテーブル行の後の行になる「newrow」が挿入されていることを隠したい場合は、「非表示」ボタンをクリックします。 iveはそれを解決しようとしましたが、解決策は出てきませんでしたが、うまく動作せず、バグがあり、ひどく書かれました。何か案は?

相続人は私の非表示方法

$(document).ready(function(){ 
    $(".hideRow").click(function(event){  

    var found; 
    found=false; 
    $('tr').each(function() { 

     if($(this).attr('class')=='newrow'){ 
      $(this).hide(); 
      found=true; 
     } 
     else if(found==true && $(this).attr('class')=='row'){ 
      return false; 
     } 
    }); 


    }); 
}); 
+0

これはあなたが意図したものかどうかわかりませんが、 'return false'は' .each() 'の現在の反復から戻ってくるだけです。その場合、あなたのコードでは本当に何もしません。 –

+0

ああ、それがうまく動作しなかった理由を説明しています。 –

+0

また、クリックした行からは開始していません。それがうまくいけば、テーブルの新しい行の最初のセットだけを隠すことになります。あなたがどこをクリックしたのかを確認するには、以下の私の答えを見てください。 –

答えて

3

あなたが達成しようとしていることはわかりませんが、あなたがこれを書いたものに基づいて十分であるはずです。

$(".hideRow").click(function() { 
    $(this).parents("tr").nextUntil("tr:not(.newrow)").hide();   
}); 

テスト済みhere

+0

非常にトリックをしていただきありがとうございます –

+0

はい、それは本当に素晴らしいソリューションです:) – Nick

1

これはトリックを行う必要があります。

$('.hideRow').click(function(){ 
    $('.newrow').hide(); 
} 

他の方法でコードを表示する必要があります。 http://jsfiddle.netまたは類似のサイトを使用して、コードをより簡単に共有してみてください。

+0

問題は、すべての新しい行を非表示にしています –

+0

あなたが扱っているHTMLコードのサンプルを表示できますか?リアルタイムでHTMLがレンダリングされました。 –

1

行が動的にここに

$('.newrow').live('click',function(){ 


}); 

を使用してみてくださいを作成している場合は、jQueryのAPIドキュメントへのリンクですhttp://api.jquery.com/live/

2

jQueryが組み込まれている機能のクラス名を探すために。 attr('class')のクラス属性を取得すると、すべてのクラスの文字列が含まれるため、newrow rowなどが得られます。これをnewrowと比較しようとすると、一致しません。

$(document).ready(function(){ 
    $(".hideRow").click(function(event){  
     $('tr .newrow').hide(); 
    }); 
}); 

あなただけの次の通常rowクラスにクリックされた行から行をしたい場合は、あなたが.nextUntil()を使用することができます。

$(document).ready(function(){ 
    $(".hideRow").click(function(event){  
     $(this).parents('tr').nextUntil('.row').hide(); 
    }); 
}); 

あなたnewrow要素は、クラスrowている場合は、あなたがする必要があるだろうこれは:

$(document).ready(function(){ 
    $(".hideRow").click(function(event){  
     $(this).parents('tr').nextUntil(':not(.newrow)').hide(); 
    }); 
}); 

もし私がhtmlの構造を知っていれば、これはおそらく最適化できます。知らないうちに、私は基本的に推測しています。また

は、ちょうどFYI、あなたのreturn falseは実際にはない.click()ハンドラから、.each()反復から返されます。

+0

助けを感謝します:) –

2

はい、あまりにも複雑です。あなたはdisplay:noneとしてCSSを設定したクラスhiderowを持つことができます。このクラスを自由に追加または削除できます。またはあなたが使用することができますhide();

私はそれを理解しているように、ユーザーは行Aで "追加"をクリックし、次に行B、Cを作成します。 、C ...

行Aに一意のID(例:R32)を与え、その作成された子クラス(C32 - 32の子を表す)の方がよいでしょう。そして、非表示ボタンがR32にクリックされたときにオフ火災:

$('.C32').hide(); 

たり、ディスプレイなしでクラスの非表示の行を作成した場合を:

$('.C32').addClass('hiderow'); 

あなたはshow();で上記の両方逆にすることができますかremoveClass('hide row');toggle();

これらはすべて、あなたが隠したい子を持つ複数のテーブル行を持つことができると仮定しています。そうでない場合は、その行の子に固有の行IDとクラスを使用する必要はないでしょう。

関連する問題