2017-12-22 101 views
1

私のテーブルの内容を空にして、読み込みを行い、最新のフェッチされたデータを表示したいのですが、問題はtheadにいくつかちらつきの問題があるようですtbodyのデータがなくなると、theadの幅が影響を受けます。theadのthの幅がtbodyの幅に一致しません

table { 
    border-collapse: collapse; 
} 

table th, 
table td { 
    padding: 5px; 
    border: 1px solid; 
} 

デモ: https://jsfiddle.net/nLrpbz9r/1/

+3

内容がなく、内容に応じて表とセルの幅が表示されるため、幅が小さくなる(フリッカーではなく)ことを意味する場合。これを防ぐために、最小または特定の幅を設定することができます。 –

+1

これは正常な動作です。同じ幅を維持したい場合は、テーブルがコンテンツの長さが最も長いセルに調整されるのではなく、固定幅の値を使用します(ピクセルである必要はなく、内容ではない一部の要素に相対的です) 。 – Shilly

+0

@ Shillyは固定幅をまったく使用できません。データの長さはサーバーからです –

答えて

0

私たちはあなたの問題を解決するだろう、私は設定されたこの2つの属性を推測:

table th, 
table td { 
    padding: 5px; 
    border: 1px solid; 
    width: 200px; 
    text-align: center; 
} 

最後の2行は、それぞれのTD幅の幅を修正(200 pxではなく、責任を支えるためにパーセント値で設定する方がよい)、最後の行はテキストを中央の位置に置くだけです。ボタンを押すと、ヘッダーセルは変更されません。

+0

固定幅だけでは機能しません。データは動的な長さです –

+0

OK!したがって、幅を固定値で維持するために最小幅にすることができます。ただし、幅幅を100%などの値に設定すると、親要素とtdタグの間のテキストの値に基づいて幅が保持されます。 –

0

あなたのCSSにtable th {min-width: 100px;}のようなものを追加してください。

$(function() { 
 
    $('button').click(function() { 
 
    const tb = $('tbody').clone() 
 
    if ($(tb).length > 0) { 
 
     $('tbody').hide() 
 
    } 
 
    }) 
 
})
table { 
 
    border-collapse: collapse; 
 
} 
 

 
table th, 
 
table td { 
 
    padding: 5px; 
 
    border: 1px solid; 
 
} 
 

 
table th {min-width: 100px;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<table> 
 
    <thead> 
 
    <tr> 
 
     <th>name</th> 
 
     <th>age</th> 
 
    </tr> 
 
    </thead> 
 
    <tbody> 
 
    <tr> 
 
     <td>john wesley</td> 
 
     <td>18</td> 
 
    </tr> 
 
    </tbody> 
 
</table> 
 

 
<button>Hide tbody</button>

1

これは正常です... display: none要素は、テーブルの幅の計算に関与していません。あなたは代わりにvisibility: collapseを使用することができます:あなたはTBODYに新しいデータを挿入する際

$(function() { 
 
    $('button').click(function() { 
 

 
    const $tb = $("tbody"); 
 
    const new_visibility = $tb.css("visibility") === "visible" ? "collapse" : "visible"; 
 
    $("tbody").css({ 
 
     "visibility": new_visibility 
 
    }); 
 

 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 

 
<button>Toggle tbody</button> 
 

 
<table border="1"> 
 
    <thead> 
 
    <tr> 
 
     <th>name</th> 
 
     <th>age</th> 
 
    </tr> 
 
    </thead> 
 
    <tbody> 
 
    <tr> 
 
     <td>john wesley</td> 
 
     <td>18</td> 
 
    </tr> 
 
    </tbody> 
 
</table>

は残念ながら...、幅はコンテンツに応じて変化します。固定レイアウトテーブルを使用する点を除いて、良い解決策はありません。

+0

hmmもしそれがajaxコールであれば、私は単純に可視性を隠すことができないと思うので、データを再レンダリングする必要があります。 –

+0

もちろん、テーブルの列に適切な幅を設定する必要があります。あなたがしない場合、テーブルは内容に応じてサイズを調整し、ちらつきます。 –

関連する問題