jQuery Datatables de débordement et d'habillage de texte des questions
J'ai le texte suivant DataTable (toute la largeur de la classe css définit la largeur = 100%)
<table class="datatable full-width">
<thead>
<th>LOB</th>
<th>Creditor Line 1</th>
<th>Creditor Line 2</th>
<th>Address</th>
<th>City</th>
<th>State</th>
<th>Zip</th>
<th></th>
</thead>
<tbody>
...
</tbody>
</table>
Javascript:
var profileTable =
$(".datatable").dataTable({
"iDisplayLength": 25,
"bDestroy": true,
"bJQueryUI": true,
"sPaginationType": "full_numbers",
"bAutoWidth": false
});
Tout fonctionne bien jusqu'à il y a un enregistrement avec une longue chaîne de texte...quand un enregistrement apparaît avec un très long texte, les données de la table déborde sur la droite de la page. (Voir la Capture d'écran ci-Dessous, la ligne rouge est l'endroit où la page fin)
http://i1109.photobucket.com/albums/h430/tbarbedo/overflow.jpg
Quelqu'un peut me dire comment le texte à la ligne dans les cellules ou d'éviter ce problème de débordement?
J'ai essayé via la table-layout: fixed " ...ce qui empêche le débordement, mais des ensembles de toutes les colonnes de la même largeur.
Grâce
Vous devez vous connecter pour publier un commentaire.
Je me suis contenté de la limitation (pour certaines personnes un avantage) d'avoir mes lignes seulement une ligne de texte haut. Le CSS contiennent de longues chaînes devient alors:
[modifier pour ajouter:] Après l'utilisation de mon propre code et d'abord à défaut, j'ai reconnu une deuxième exigence qui pourraient aider les gens. La table elle-même doit avoir une disposition fixe ou les cellules vont juste continuer à essayer de s'étendre à accueillir des contenus n'importe quoi. Si les styles de tables de données ou de vos propres styles n'est pas déjà le cas, vous devez le configurer:
Maintenant que le texte est tronqué avec des points de suspension, pour "voir" le texte qui est potentiellement cachés, vous pouvez mettre en œuvre une info-bulle plugin ou un bouton ou quelque chose. Mais un rapide et sale solution est d'utiliser JavaScript pour chaque cellule de titre pour être identique à celle de son contenu. J'ai utilisé jQuery, mais vous n'avez pas à:
Tables de données fournit également des rappels à la ligne et de la cellule de rendu niveaux, de sorte que vous pourriez fournir logique pour définir les titres à ce point au lieu de avec un
jQuery.each
itérateur. Mais si vous avez d'autres auditeurs que de modifier le texte de la cellule, vous pourriez être mieux de les frapper avec lejQuery.each
à la fin.Toute cette troncature méthode aura ÉGALEMENT une limitation, vous avez indiqué que vous n'êtes pas un fan d': par défaut, les colonnes ont la même largeur. Je identifier les colonnes qui vont être systématiquement large et cohérente à l'étroit, et de définir explicitement un pourcentage de la largeur sur eux (vous pouvez le faire dans votre balisage ou avec sWidth). Toutes les colonnes, sans obligation de largeur d'obtenir une distribution uniforme de l'espace restant.
Cela peut sembler beaucoup de compromis, mais le résultat final en valait la peine pour moi.
Le code CSS suivant déclaration qui fonctionne pour moi:
Vous pouvez essayer le réglage de la
word-wrap
cependant il ne fonctionne pas dans tous les navigateurs encore.Une autre méthode serait d'ajouter un élément à votre cellule de données comme ceci:
Puis ajouter un peu de css comme ceci:
Le même problème et j'ai résolu de mettre sur la table entre le code
Je suis en retard ici, mais après avoir lu @Greg Pettit réponse et un couple de blogs et d'autres questions je ne peux malheureusement pas me souvenir, j'ai décidé de faire juste un couple de tables de données des plugins pour faire face.
Je les ai mis sur bitbucket dans un Mercurial repo. Je follwed la fnSetFilteringDelay plugin et juste changé les commentaires et le code à l'intérieur, que je n'ai jamais fait un plugin pour quoi que ce soit avant. J'ai fait les 2, et n'hésitez pas à les utiliser, contribuer à, ou de fournir des suggestions.
dataTables.TruncateCells - tronque la valeur de chaque cellule dans une colonne vers le bas pour un nombre défini de caractères, de remplacer les 3 dernières avec une ellipse, et met le plein de pré-texte tronqué dans la cellule intitulé attribué.
dataTables.BreakCellText - tente d'insérer un caractère de saut de toutes les X, défini par l'utilisateur, les caractères de chaque cellule dans la colonne. Il y a des bizarreries concernant les cellules qui contiennent à la fois des espaces et des tirets, vous pouvez obtenir un peu bizarre à la recherche de résultats (comme un couple de personnages zigzaguant après la dernière inséré
caractère). Peut-être quelqu'un peut la rendre plus robuste, ou vous pouvez juste jouer avec le breakPos pour la colonne pour le faire paraître très bien avec vos données.
J'ai été confrontée au même problème de l'habillage du texte, résolu en modifiant le css de la classe de la table dans DT_bootstrap.css.
J'ai introduit deux dernières lignes css table-mise en page et word-break.
Tout simplement le style css à l'aide
white-space:nowrap
fonctionne très bien pour éviter l'habillage du texte dans les cellules. Et bien sûr, vous pouvez utiliser letext-overflow:ellipsis
etoverflow:hidden
pour tronquer du texte avec des points de suspension en effet.Essayez d'ajouter
td {word-wrap: break-word;}
pour le css et voir si cela résout-il.Vous pouvez simplement utiliser le rendu et l'enveloppe de votre propre div ou span autour d'elle. La TD sont difficiles à style quand il s'agit de max-width, max-height, etc. Div et span est facile..
Voir: https://datatables.net/examples/advanced_init/column_render.html
Je pense qu'une solution plus agréable de travailler avec des hacks CSS qui ne sont pas pris en charge multi-navigateur.
À l'aide des classes "responsive nowrap" sur l'élément de la table devrait faire l'affaire.