表の行でSlideDown(またはShow)関数を使用する方法


214

テーブルに行を追加し、その行をスライドさせて表示しようとしていますが、slidedown関数は、レイアウトを混乱させるテーブル行にdisplay:blockスタイルを追加しているようです。

これを回避する方法はありますか?

これがコードです:

$.get('/some_url', 
  { 'val1': id },

  function (data) {
    var row = $('#detailed_edit_row');
    row.hide();
    row.html(data);
    row.slideDown(1000);
  }
);

テーブルである必要がありますか?テーブルがなければ、ずっと簡単になると思います。
MrChrister 2009年

fadeInfadeOutテーブルの行で作業し、素晴らしい代替視覚効果を作成します(Firefoxでのみテスト済み)
Savage

回答:


295

アニメーションはテーブル行ではサポートされていません。

ChafferとSwedbergによる「Learning jQuery」から


ブラウザは表示プロパティに異なる値(テーブル行とブロック)を使用するため、テーブル行はアニメーションに特定の障害をもたらします。アニメーションなしの.hide()メソッドと.show()メソッドは、テーブルの行で常に安全に使用できます。jQueryバージョン1.1.3以降では、.fadeIn()および.fadeOut()も使用できます。


tdのコンテンツをdivでラップして、slideDownを使用できます。アニメーションが追加のマークアップに値するかどうかを決定する必要があります。


5
よく働く!他にもマイナーな問題があります。セルパディングがある場合は、それもアニメーション化する必要があります。しかし、それも大したことではありません。
Adrian Grigore

11
:あなたはこのようにパディングをアニメーション化することができます$('tr').find('td').animate({padding: '0px'}, {duration: 200});
アンドリュー・

@エミリー:jQueryソースの特定の行を指さしていただけませんか?プロジェクトのソースをハックしたくなります。
Randomblue

7
直接的な回答ではありませんが、fadeIn / fadeOutを使用することはほとんどの状況でほぼ同じであり、テーブルの行では問題なく機能するようです。
Phil LaNasa、2014年

@PhilLaNasa最初は「いや、見た目が良くない」みたいでしたが、試してみたら本当に良さそうでした!ご旅行ありがとうございます!
ケントン

157

trを動的にラップし、slideUp / slideDownが完了したら削除します。これは、1つまたはいくつかのタグを追加および削除し、アニメーションが完了したらそれらを削除するという非常に小さなオーバーヘッドです。目に見える遅れはまったくありません。

SlideUp

$('#my_table > tbody > tr.my_row')
 .find('td')
 .wrapInner('<div style="display: block;" />')
 .parent()
 .find('td > div')
 .slideUp(700, function(){

  $(this).parent().parent().remove();

 });

SlideDown:

$('#my_table > tbody > tr.my_row')
 .find('td')
 .wrapInner('<div style="display: none;" />')
 .parent()
 .find('td > div')
 .slideDown(700, function(){

  var $set = $(this);
  $set.replaceWith($set.contents());

 });

私は彼のプラグインを取り、それを上記に取り除いたのでfletchzone.comに敬意を表する必要があります、乾杯。


ありがとう!何とかこれは私のために働きました:row.find( 'td')。wrapInner( '<div style = "display:none;" />').parent().prependTo('#MainTable> tbody')。find( ' td> div ')。slideDown(' slow '、function(){var $ set = $(this); $ set.replaceWith($ set.contents());});
pauloya 2011年

唯一の問題は、セル間にわずかな遅延があることです。
アルキメデストラハノ2015

41

これは私がこのために作成したプラグインです。Fletchの実装から少しかかりますが、私のプラグインは行を上下にスライドするためだけに使用されます(行を挿入しない)。

(function($) {
var sR = {
    defaults: {
        slideSpeed: 400,
        easing: false,
        callback: false     
    },
    thisCallArgs: {
        slideSpeed: 400,
        easing: false,
        callback: false
    },
    methods: {
        up: function (arg1,arg2,arg3) {
            if(typeof arg1 == 'object') {
                for(p in arg1) {
                    sR.thisCallArgs.eval(p) = arg1[p];
                }
            }else if(typeof arg1 != 'undefined' && (typeof arg1 == 'number' || arg1 == 'slow' || arg1 == 'fast')) {
                sR.thisCallArgs.slideSpeed = arg1;
            }else{
                sR.thisCallArgs.slideSpeed = sR.defaults.slideSpeed;
            }

            if(typeof arg2 == 'string'){
                sR.thisCallArgs.easing = arg2;
            }else if(typeof arg2 == 'function'){
                sR.thisCallArgs.callback = arg2;
            }else if(typeof arg2 == 'undefined') {
                sR.thisCallArgs.easing = sR.defaults.easing;    
            }
            if(typeof arg3 == 'function') {
                sR.thisCallArgs.callback = arg3;
            }else if(typeof arg3 == 'undefined' && typeof arg2 != 'function'){
                sR.thisCallArgs.callback = sR.defaults.callback;    
            }
            var $cells = $(this).find('td');
            $cells.wrapInner('<div class="slideRowUp" />');
            var currentPadding = $cells.css('padding');
            $cellContentWrappers = $(this).find('.slideRowUp');
            $cellContentWrappers.slideUp(sR.thisCallArgs.slideSpeed,sR.thisCallArgs.easing).parent().animate({
                                                                                                                paddingTop: '0px',
                                                                                                                paddingBottom: '0px'},{
                                                                                                                complete: function () {
                                                                                                                    $(this).children('.slideRowUp').replaceWith($(this).children('.slideRowUp').contents());
                                                                                                                    $(this).parent().css({'display':'none'});
                                                                                                                    $(this).css({'padding': currentPadding});
                                                                                                                }});
            var wait = setInterval(function () {
                if($cellContentWrappers.is(':animated') === false) {
                    clearInterval(wait);
                    if(typeof sR.thisCallArgs.callback == 'function') {
                        sR.thisCallArgs.callback.call(this);
                    }
                }
            }, 100);                                                                                                    
            return $(this);
        },
        down: function (arg1,arg2,arg3) {
            if(typeof arg1 == 'object') {
                for(p in arg1) {
                    sR.thisCallArgs.eval(p) = arg1[p];
                }
            }else if(typeof arg1 != 'undefined' && (typeof arg1 == 'number' || arg1 == 'slow' || arg1 == 'fast')) {
                sR.thisCallArgs.slideSpeed = arg1;
            }else{
                sR.thisCallArgs.slideSpeed = sR.defaults.slideSpeed;
            }

            if(typeof arg2 == 'string'){
                sR.thisCallArgs.easing = arg2;
            }else if(typeof arg2 == 'function'){
                sR.thisCallArgs.callback = arg2;
            }else if(typeof arg2 == 'undefined') {
                sR.thisCallArgs.easing = sR.defaults.easing;    
            }
            if(typeof arg3 == 'function') {
                sR.thisCallArgs.callback = arg3;
            }else if(typeof arg3 == 'undefined' && typeof arg2 != 'function'){
                sR.thisCallArgs.callback = sR.defaults.callback;    
            }
            var $cells = $(this).find('td');
            $cells.wrapInner('<div class="slideRowDown" style="display:none;" />');
            $cellContentWrappers = $cells.find('.slideRowDown');
            $(this).show();
            $cellContentWrappers.slideDown(sR.thisCallArgs.slideSpeed, sR.thisCallArgs.easing, function() { $(this).replaceWith( $(this).contents()); });

            var wait = setInterval(function () {
                if($cellContentWrappers.is(':animated') === false) {
                    clearInterval(wait);
                    if(typeof sR.thisCallArgs.callback == 'function') {
                        sR.thisCallArgs.callback.call(this);
                    }
                }
            }, 100);
            return $(this);
        }
    }
};

$.fn.slideRow = function(method,arg1,arg2,arg3) {
    if(typeof method != 'undefined') {
        if(sR.methods[method]) {
            return sR.methods[method].apply(this, Array.prototype.slice.call(arguments,1));
        }
    }
};
})(jQuery);

基本的な使い方:

$('#row_id').slideRow('down');
$('#row_id').slideRow('up');

スライドオプションを個別の引数として渡します。

$('#row_id').slideRow('down', 500); //slide speed
$('#row_id').slideRow('down', 500, function() { alert('Row available'); }); // slide speed and callback function
$('#row_id').slideRow('down', 500, 'linear', function() { alert('Row available'); }); slide speed, easing option and callback function
$('#row_id').slideRow('down', {slideSpeed: 500, easing: 'linear', callback: function() { alert('Row available');} }); //options passed as object

基本的に、スライドダウンアニメーションの場合、プラグインはセルのコンテンツをDIVにラップし、それらをアニメーション化してから削除します。逆に、スライドアップの場合はその逆になります(セルのパディングを取り除くための追加手順がいくつかあります)。また、呼び出したオブジェクトを返すので、次のようにメソッドをチェーンできます。

$('#row_id').slideRow('down').css({'font-color':'#F00'}); //make the text in the row red

これが誰かを助けることを願っています。


行のグループを追加/削除したい場合はどうなりますか?私はマスター/詳細機能を提供する必要があります
Volatil3

コールバック関数がすぐに起動します。
ジャスティン

それは単に明白に見せびらかしているだけです。(コールバック機能をテストしていませんが)素晴らしい作品です。いつか、それをリバースエンジニアリングするのに十分なjQueryを知っています。
cartbeforehorse 2012年

1
参考:ターゲット行のコンテンツが別のテーブルである場合、これは壊れているようです。これ以上進む時間はありませんが、子テーブルを折りたたみ、すべての行を非表示に設定し、奇妙なパディングを追加し、slideRowを呼び出すとそれらの行を再展開しないことがわかりました。 ('ダウン')。
Chris Porter

1
他のスライドテーブルと同じ問題が発生しました。slideRow( 'up')を呼び出した後、slideRow( 'down')を呼び出すと、子テーブルがおかしくなりました。プラグインでfind( 'td')メソッドが2回使用されていることが原因であることがわかりました。これを子供( 'td')に変更すると、問題はすぐになくなりました。thセルに問題がある場合は、children( 'td')の両方のインスタンスをchildren( 'td、th')に更新します。
オレゴンジェフ2017年

4

行のコンテンツをでラップして<span>、セレクターを$('#detailed_edit_row span');少しハックにしようとすることもできますが、私はそれをテストしただけで機能します。table-row上記の提案も試してみましたが、うまくいきませんでした。

update:私はこの問題をいじってみましたが、すべての指摘から、jQueryは、slideDownを実行するオブジェクトをブロック要素にする必要があります。だから、サイコロはありません。セルでSlideDownを使用したテーブルを思い起こさせることができましたが、レイアウトにはまったく影響がなかったため、どのように設定されているかわかりません。私はあなたの唯一の解決策は、そのセルがブロックであるか、単に.show();気の利いたものであるような方法でテーブルをリファクタリングすることだと思います。幸運を。


1
trおよびtdタグをアニメーション化することはできません。あなたは、TRを表示/非表示、その後、div要素をアニメーション化し、その後、div要素と各TDの内容をラップする必要があります:<td><div style="display:block">contents</div></td>
アンドリュー

4

次のように行の内容を選択します。

$(row).contents().slideDown();

.contents() -テキストノードやコメントノードを含む、一致する要素のセット内の各要素の子を取得します。


列も選択する必要があるので、などのようにし$('tr > td').contents().slideDown()ます。列内のすべてのコンテンツがタグでラップされていること、つまり機能しないことを確認してください<td>Some text</td>。これが最も簡単な解決策です。
user2233706 2015

3

私はこれに答えるのが少し遅れていますが、それを行う方法を見つけました:)

function eventinfo(id) {
    tr = document.getElementById("ei"+id);
    div = document.getElementById("d"+id);
    if (tr.style.display == "none") {
        tr.style.display="table-row";
        $(div).slideDown('fast');
    } else {
        $(div).slideUp('fast');
        setTimeout(function(){tr.style.display="none";}, 200);
    }
}

テーブルのデータタグ内にdiv要素を配置するだけです。表示に設定されている場合、divが展開されると、行全体が下に移動します。次に、テーブルの行をもう一度非表示にする前に、フェードバックするように指示します(その後、タイムアウトして効果を確認します)。

これが誰かを助けることを願っています!


3

行をクリックすると、非表示の行がスライドして表示されるテーブルを作成しました。


3

入れ子になったテーブルを持つテーブル行があります:

<tr class='dummyRow' style='display: none;'>
    <td>
        <table style='display: none;'>All row content inside here</table>
    </td>
</tr>

行をスライドダウンするには:

$('.dummyRow').show().find("table").slideDown();

注:行とそのコンテンツ(ここでは"table")は両方とも、アニメーションを開始する前に非表示にする必要があります。


行をスライドアップするには:

$('.dummyRow').find("table").slideUp('normal', function(){$('.dummyRow').hide();});

2番目のパラメーター(function())はコールバックです。


シンプル!!

スライドアップ/ダウン機能のパラメーターとして追加できるオプションもいくつかあることに注意してください(最も一般的なのは'slow'およびの期間です'fast')。


実際に行の間にコンテンツを入れましたか、それともタイプミスでしたか?
Vincent

2

行のtd要素を使用してこれを回避しました:

$(ui.item).children("td").effect("highlight", { color: "#4ca456" }, 1000);

行自体をアニメーション化すると、奇妙な動作、主に非同期のアニメーションの問題が発生します。

上記のコードでは、テーブル内でドラッグアンドドロップされた行を強調表示して、更新が成功したことを強調しています。これが誰かを助けることを願っています。


取得中effect is not a function
サベージ、

2

ここで提供されたアイデアを使用しましたが、いくつかの問題に直面しました。私はそれらすべてを修正し、共有したいスムーズなワンライナーを持っています。

$('#row_to_slideup').find('> td').css({'height':'0px'}).wrapInner('<div style=\"display:block;\" />').parent().find('td > div').slideUp('slow', function() {$(this).parent().parent().remove();});

td要素でcssを使用します。高さを0pxに減らします。そうすれば、各td要素内に新しく作成されたdiv-wrapperのコンテンツの高さのみが重要になります。

slideUpが遅い。さらに遅くすると、グリッチが発生する可能性があります。最初の小さなジャンプ。これは、前述のcss設定が原因です。しかし、これらの設定がなければ、行の高さは減少しません。その内容のみです。

最後にtr要素が削除されます。

行全体にはJQueryのみが含まれ、ネイティブJavaScriptは含まれていません。

それが役に立てば幸い。

次にコード例を示します。

    <html>
            <head>
                    <script src="https://code.jquery.com/jquery-3.2.0.min.js">               </script>
            </head>
            <body>
                    <table>
                            <thead>
                                    <tr>
                                            <th>header_column 1</th>
                                            <th>header column 2</th>
                                    </tr>
                            </thead>
                            <tbody>
                                    <tr id="row1"><td>row 1 left</td><td>row 1 right</td></tr>
                                    <tr id="row2"><td>row 2 left</td><td>row 2 right</td></tr>
                                    <tr id="row3"><td>row 3 left</td><td>row 3 right</td></tr>
                                    <tr id="row4"><td>row 4 left</td><td>row 4 right</td></tr>
                            </tbody>
                    </table>
                    <script>
    setTimeout(function() {
    $('#row2').find('> td').css({'height':'0px'}).wrapInner('<div style=\"display:block;\" />').parent().find('td > div').slideUp('slow',         function() {$(this).parent().parent().remove();});
    }, 2000);
                    </script>
            </body>
    </html>

この投稿はちょうど2歳です。私はjqueryバージョン3.2.0を使用しています。今日、コードをChrome 73.0.3683.75でテストしましたが、うまくいきました。
darkwind

1

全身をスライドさせたいのですが、フェードエフェクトとスライドエフェクトを組み合わせてこの問題を解決しています。

私はこれを3段階で行いました(2番目と3番目のステップは、下または上にスライドする場合に備えて置き換えられます)

  1. tbodyに高さを割り当て、
  2. すべてのtdとthをフェードし、
  3. Tbodyをスライドさせます。

slideUpの例:

tbody.css('height', tbody.css('height'));
tbody.find('td, th').fadeOut(200, function(){
    tbody.slideUp(300)
});

これは、特定の行だけでなく、テーブル全体に影響しませんか?
サベージ、

1

提供されている他のすべてのソリューションに問題がありましたが、バターのようにスムーズなこの単純なことをやるようになりました。

次のようにHTMLを設定します。

<tr id=row1 style='height:0px'><td>
  <div id=div1 style='display:none'>
    Hidden row content goes here
  </div>
</td></tr>

次に、次のようにJavaScriptを設定します。

function toggleRow(rowid){
  var row = document.getElementById("row" + rowid)

  if(row.style.height == "0px"){
      $('#div' + rowid).slideDown('fast');
      row.style.height = "1px";   
  }else{
      $('#div' + rowid).slideUp('fast');
      row.style.height = "0px";   
  } 
}

基本的に、「見えない」行を0pxの高さにし、divを中に入れます。
(行ではなく)divでアニメーションを使用し、行の高さを1pxに設定します。

行を再度非表示にするには、divで反対のアニメーションを使用し、行の高さを0pxに戻します。


1

私は、Vinnyが作成し、使用しているプラ​​グインが気に入りました。ただし、スライドする行(tr / td)内のテーブルの場合、ネストされたテーブルの行は、スライドした後でも常に非表示になります。そのため、ネストされたテーブルの行を非表示にしないように、プラグインをすばやく簡単にハックしました。次の行を変更するだけです

var $cells = $(this).find('td');

var $cells = $(this).find('> td');

ネストされたものではなく、即時のtdsのみを検索します。これがプラグインを使用し、ネストされたテーブルを持っている人を助けることを願っています。


1

#Vinnyの投稿にコメントを追加したいのですが、担当者がいないため、回答を投稿する必要があります...

プラグインにバグが見つかりました-引数を指定してオブジェクトを渡すと、他の引数が渡されない場合は上書きされます。引数の処理順序を変更することで簡単に解決できます。以下のコードを使用してください。また、閉じた後で行を破棄するオプションも追加しました(必要な場合のみ!):$( '#row_id')。slideRow( 'up'、true); //行を破棄します

(function ($) {
    var sR = {
        defaults: {
            slideSpeed: 400,
            easing: false,
            callback: false
        },
        thisCallArgs: {
            slideSpeed: 400,
            easing: false,
            callback: false,
            destroyAfterUp: false
        },
        methods: {
            up: function (arg1, arg2, arg3) {
                if (typeof arg2 == 'string') {
                    sR.thisCallArgs.easing = arg2;
                } else if (typeof arg2 == 'function') {
                    sR.thisCallArgs.callback = arg2;
                } else if (typeof arg2 == 'undefined') {
                    sR.thisCallArgs.easing = sR.defaults.easing;
                }
                if (typeof arg3 == 'function') {
                    sR.thisCallArgs.callback = arg3;
                } else if (typeof arg3 == 'undefined' && typeof arg2 != 'function') {
                    sR.thisCallArgs.callback = sR.defaults.callback;
                }
                if (typeof arg1 == 'object') {
                    for (p in arg1) {
                        sR.thisCallArgs[p] = arg1[p];
                    }
                } else if (typeof arg1 != 'undefined' && (typeof arg1 == 'number' || arg1 == 'slow' || arg1 == 'fast')) {
                    sR.thisCallArgs.slideSpeed = arg1;
                } else if (typeof arg1 != 'undefined' && (typeof arg1 == 'boolean')) {
                    sR.thisCallArgs.destroyAfterUp = arg1;
                } else {
                    sR.thisCallArgs.slideSpeed = sR.defaults.slideSpeed;
                }

                var $row = $(this);
                var $cells = $row.children('th, td');
                $cells.wrapInner('<div class="slideRowUp" />');
                var currentPadding = $cells.css('padding');
                $cellContentWrappers = $(this).find('.slideRowUp');
                $cellContentWrappers.slideUp(sR.thisCallArgs.slideSpeed, sR.thisCallArgs.easing).parent().animate({
                    paddingTop: '0px',
                    paddingBottom: '0px'
                }, {
                    complete: function () {
                        $(this).children('.slideRowUp').replaceWith($(this).children('.slideRowUp').contents());
                        $(this).parent().css({ 'display': 'none' });
                        $(this).css({ 'padding': currentPadding });
                    }
                });
                var wait = setInterval(function () {
                    if ($cellContentWrappers.is(':animated') === false) {
                        clearInterval(wait);
                        if (sR.thisCallArgs.destroyAfterUp)
                        {
                            $row.replaceWith('');
                        }
                        if (typeof sR.thisCallArgs.callback == 'function') {
                            sR.thisCallArgs.callback.call(this);
                        }
                    }
                }, 100);
                return $(this);
            },
            down: function (arg1, arg2, arg3) {

                if (typeof arg2 == 'string') {
                    sR.thisCallArgs.easing = arg2;
                } else if (typeof arg2 == 'function') {
                    sR.thisCallArgs.callback = arg2;
                } else if (typeof arg2 == 'undefined') {
                    sR.thisCallArgs.easing = sR.defaults.easing;
                }
                if (typeof arg3 == 'function') {
                    sR.thisCallArgs.callback = arg3;
                } else if (typeof arg3 == 'undefined' && typeof arg2 != 'function') {
                    sR.thisCallArgs.callback = sR.defaults.callback;
                }
                if (typeof arg1 == 'object') {
                    for (p in arg1) {
                        sR.thisCallArgs.eval(p) = arg1[p];
                    }
                } else if (typeof arg1 != 'undefined' && (typeof arg1 == 'number' || arg1 == 'slow' || arg1 == 'fast')) {
                    sR.thisCallArgs.slideSpeed = arg1;
                } else {
                    sR.thisCallArgs.slideSpeed = sR.defaults.slideSpeed;
                }

                var $cells = $(this).children('th, td');
                $cells.wrapInner('<div class="slideRowDown" style="display:none;" />');
                $cellContentWrappers = $cells.find('.slideRowDown');
                $(this).show();
                $cellContentWrappers.slideDown(sR.thisCallArgs.slideSpeed, sR.thisCallArgs.easing, function () { $(this).replaceWith($(this).contents()); });

                var wait = setInterval(function () {
                    if ($cellContentWrappers.is(':animated') === false) {
                        clearInterval(wait);
                        if (typeof sR.thisCallArgs.callback == 'function') {
                            sR.thisCallArgs.callback.call(this);
                        }
                    }
                }, 100);
                return $(this);
            }
        }
    };

    $.fn.slideRow = function (method, arg1, arg2, arg3) {
        if (typeof method != 'undefined') {
            if (sR.methods[method]) {
                return sR.methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
            }
        }
    };
})(jQuery);

私が子供たちとthの修正にも追加したことを言及するのを忘れました
Mark Ba​​ll

0

テーブルの行を同時にスライドしてフェードする必要がある場合は、次の方法を試してください。

jQuery.fn.prepareTableRowForSliding = function() {
    $tr = this;
    $tr.children('td').wrapInner('<div style="display: none;" />');
    return $tr;
};

jQuery.fn.slideFadeTableRow = function(speed, easing, callback) {
    $tr = this;
    if ($tr.is(':hidden')) {
        $tr.show().find('td > div').animate({opacity: 'toggle', height: 'toggle'}, speed, easing, callback);
    } else {
        $tr.find('td > div').animate({opacity: 'toggle', height: 'toggle'}, speed, easing, function(){
            $tr.hide();
            callback();
        });
    }
    return $tr;
};

$(document).ready(function(){
    $('tr.special').hide().prepareTableRowForSliding();
    $('a.toggle').toggle(function(){
        $button = $(this);
        $tr = $button.closest('tr.special'); //this will be specific to your situation
        $tr.slideFadeTableRow(300, 'swing', function(){
            $button.text('Hide table row');
        });
    }, function(){
        $button = $(this);
        $tr = $button.closest('tr.special'); //this will be specific to your situation
        $tr.slideFadeTableRow(300, 'swing', function(){
            $button.text('Display table row');
        });
});
});

0
function hideTr(tr) {
  tr.find('td').wrapInner('<div style="display: block;" />').parent().find('td > div').slideUp(50, function () {
    tr.hide();
    var $set = jQuery(this);
    $set.replaceWith($set.contents());
  });
}

function showTr(tr) {
  tr.show()
  tr.find('td').wrapInner('<div style="display: none;" />').parent().find('td > div').slideDown(50, function() {
    var $set = jQuery(this);
    $set.replaceWith($set.contents());
  });
}

次のような方法を使用できます。

jQuery("[data-toggle-tr-trigger]").click(function() {
  var $tr = jQuery(this).parents(trClass).nextUntil(trClass);
  if($tr.is(':hidden')) {
    showTr($tr);
  } else {
    hideTr($tr);
  }
});

0

行のtdを何も表示しないように設定すると、行の高さのアニメーションを開始できます

tbody tr{
    min-height: 50px;
}
tbody tr.ng-hide td{
    display: none;
}
tr.hide-line{
    -moz-transition: .4s linear all;
    -o-transition: .4s linear all;
    -webkit-transition: .4s linear all;
    transition: .4s linear all;
    height: 50px;
    overflow: hidden;

    &.ng-hide { //angularJs specific
        height: 0;
        min-height: 0;
    }
}

0

このコードは機能します!

<!DOCTYPE html>

<html lang="en">
    <head>
        <meta charset="utf-8" />
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
        <title></title>
        <script>
            function addRow() {
                $('.displaynone').show();
                $('.displaynone td')
                .wrapInner('<div class="innerDiv" style="height:0" />');
                $('div').animate({"height":"20px"});
            }
        </script>
        <style>
            .mycolumn{border: 1px solid black;}
            .displaynone{display: none;}
        </style>
    </head>
    <body>
        <table align="center" width="50%">
            <tr>
                <td class="mycolumn">Row 1</td>
            </tr>
            <tr>
                <td class="mycolumn">Row 2</td>
            </tr>
            <tr class="displaynone">
                <td class="mycolumn">Row 3</td>
            </tr>
            <tr>
                <td class="mycolumn">Row 4</td>
            </tr>
        </table>
        <br>
        <button onclick="addRow();">add</button>    
    </body>
</html>

0

http://jsfiddle.net/PvwfK/136/

<table cellspacing='0' cellpadding='0' class='table01' id='form_table' style='width:100%;'>
<tr>
    <td style='cursor:pointer; width:20%; text-align:left;' id='header'>
        <label style='cursor:pointer;'> <b id='header01'>▲ Customer Details</b>

        </label>
    </td>
</tr>
<tr>
    <td style='widtd:20%; text-align:left;'>
        <div id='content' class='content01'>
            <table cellspacing='0' cellpadding='0' id='form_table'>
                <tr>
                    <td>A/C ID</td>
                    <td>:</td>
                    <td>3000/A01</td>
                </tr>
                <tr>
                    <td>A/C ID</td>
                    <td>:</td>
                    <td>3000/A01</td>
                </tr>
                <tr>
                    <td>A/C ID</td>
                    <td>:</td>
                    <td>3000/A01</td>
                </tr>
            </table>
        </div>
    </td>
</tr>

$(function () {
$(".table01 td").on("click", function () {
    var $rows = $('.content01');
    if ($(".content01:first").is(":hidden")) {
        $("#header01").text("▲ Customer Details");
        $(".content01:first").slideDown();
    } else {
        $("#header01").text("▼ Customer Details");
        $(".content01:first").slideUp();
    }
});

});


これは、テーブルを含むdivを表示および非表示にします。OPが要求したテーブル行ではありません。
shazbot 2016年

0

Vinnyが提供するプラグインは本当に近いですが、いくつかの小さな問題を見つけて修正しました。

  1. 隠されている行の子だけを超えて、td要素を貪欲にターゲットにしました。行を表示するときにそれらの子供を探していたら、これは一種のOKでした。それが近づく間、それらはすべて「display:none」で終わり、それらを非表示にしました。
  2. それは子th要素をまったく対象としませんでした。
  3. 多くのコンテンツを含むテーブルセル(多くの行を含む入れ子になったテーブルなど)の場合、slideRow( 'up')を呼び出すと、指定されたslideSpeed値に関係なく、パディングアニメーションが実行されるとすぐに行のビューが折りたたまれます。ラッピングのSlideUp()メソッドが完了するまでパディングアニメーションがトリガーされないように修正しました。

    (function($){
        var sR = {
            defaults: {
                slideSpeed: 400
              , easing: false
              , callback: false
            }
          , thisCallArgs:{
                slideSpeed: 400
              , easing: false
              , callback: false
            }
          , methods:{
                up: function(arg1, arg2, arg3){
                    if(typeof arg1 == 'object'){
                        for(p in arg1){
                            sR.thisCallArgs.eval(p) = arg1[p];
                        }
                    }else if(typeof arg1 != 'undefined' && (typeof arg1 == 'number' || arg1 == 'slow' || arg1 == 'fast')){
                        sR.thisCallArgs.slideSpeed = arg1;
                    }else{
                        sR.thisCallArgs.slideSpeed = sR.defaults.slideSpeed;
                    }
    
                    if(typeof arg2 == 'string'){
                        sR.thisCallArgs.easing = arg2;
                    }else if(typeof arg2 == 'function'){
                        sR.thisCallArgs.callback = arg2;
                    }else if(typeof arg2 == 'undefined'){
                        sR.thisCallArgs.easing = sR.defaults.easing;    
                    }
                    if(typeof arg3 == 'function'){
                        sR.thisCallArgs.callback = arg3;
                    }else if(typeof arg3 == 'undefined' && typeof arg2 != 'function'){
                        sR.thisCallArgs.callback = sR.defaults.callback;    
                    }
                    var $cells = $(this).children('td, th');
                    $cells.wrapInner('<div class="slideRowUp" />');
                    var currentPadding = $cells.css('padding');
                    $cellContentWrappers = $(this).find('.slideRowUp');
                    $cellContentWrappers.slideUp(sR.thisCallArgs.slideSpeed, sR.thisCallArgs.easing, function(){
                        $(this).parent().animate({ paddingTop: '0px', paddingBottom: '0px' }, {
                            complete: function(){
                                $(this).children('.slideRowUp').replaceWith($(this).children('.slideRowUp').contents());
                                $(this).parent().css({ 'display': 'none' });
                                $(this).css({ 'padding': currentPadding });
                            }
                        });
                    });
                    var wait = setInterval(function(){
                        if($cellContentWrappers.is(':animated') === false){
                            clearInterval(wait);
                            if(typeof sR.thisCallArgs.callback == 'function'){
                                sR.thisCallArgs.callback.call(this);
                            }
                        }
                    }, 100);                                                                                                    
                    return $(this);
                }
              , down: function (arg1, arg2, arg3){
                    if(typeof arg1 == 'object'){
                        for(p in arg1){
                            sR.thisCallArgs.eval(p) = arg1[p];
                        }
                    }else if(typeof arg1 != 'undefined' && (typeof arg1 == 'number' || arg1 == 'slow' || arg1 == 'fast')){
                        sR.thisCallArgs.slideSpeed = arg1;
                    }else{
                        sR.thisCallArgs.slideSpeed = sR.defaults.slideSpeed;
                    }
    
                    if(typeof arg2 == 'string'){
                        sR.thisCallArgs.easing = arg2;
                    }else if(typeof arg2 == 'function'){
                        sR.thisCallArgs.callback = arg2;
                    }else if(typeof arg2 == 'undefined'){
                        sR.thisCallArgs.easing = sR.defaults.easing;    
                    }
                    if(typeof arg3 == 'function'){
                        sR.thisCallArgs.callback = arg3;
                    }else if(typeof arg3 == 'undefined' && typeof arg2 != 'function'){
                        sR.thisCallArgs.callback = sR.defaults.callback;    
                    }
                    var $cells = $(this).children('td, th');
                    $cells.wrapInner('<div class="slideRowDown" style="display:none;" />');
                    $cellContentWrappers = $cells.find('.slideRowDown');
                    $(this).show();
                    $cellContentWrappers.slideDown(sR.thisCallArgs.slideSpeed, sR.thisCallArgs.easing, function() { $(this).replaceWith( $(this).contents()); });
    
                    var wait = setInterval(function(){
                        if($cellContentWrappers.is(':animated') === false){
                            clearInterval(wait);
                            if(typeof sR.thisCallArgs.callback == 'function'){
                                sR.thisCallArgs.callback.call(this);
                            }
                        }
                    }, 100);
                    return $(this);
                }
            }
        };
    
        $.fn.slideRow = function(method, arg1, arg2, arg3){
            if(typeof method != 'undefined'){
                if(sR.methods[method]){
                    return sR.methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
                }
            }
        };
    })(jQuery);

@circuitry、提供するために何か特別なものはありましたか、それともあなたの批判は十分ですか?
オレゴンジェフ2017

@Oregoneff正直言って。もっと簡単なものを探しています。表の行をスライドするのに109行のコードを使用するべきではありません。
回路

@circuitry、プラグインとして使用できるようにしたい場合(そして、使用固有のコードの悪い習慣に従事するだけでなく)、速度を制御したり、イージングしたり、カスタマイズ可能なものにコールバックしたりする場合は、単純にはなりません基礎。これはコードライブラリに含めるものであり、テーブルの行の展開/折りたたみを必要とする実装に使用できるため 109行のコードであることが重要である理由がわかりません。
オレゴンジェフ2017

0

クイック/イージーフィックス:

JQuery .toggle()を使用するをて、行またはアンカーのクリック時に行を表示/非表示にします。

非表示にしたい行を識別するための関数を作成する必要がありますが、トグルは探している機能を作成します。


これはこの回答ですでに提案されていたと思います...
DarkCygnus
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.