Comment puis-je calculer la hauteur d'une ligne (en pixels) dans une table avec JavaScript?
8 Réponses :
function findHeights() { var tbl = document.getElementById('your table').rows; alert(tbl[0].offsetHeight); // row 1 }
Vous devez également connaître l'espacement des frontières aussi.
document.getElementById('your_row_id').offsetHeight;
si offsetheight s'applique également à déterminer la hauteur de la ligne d'un paragraphe?
<table id="tableId"> <tr> <td>Cell 1</td> <td>Cell 2</td> </tr> <tr> <td>Cell 1</td> <td>Cell 2</td> </tr> </table>
C'est probablement la réponse la plus proche jusqu'à présent. La seule chose est que cela ne garantira aucune ligne particulière ... juste la hauteur moyenne de tous. Cela peut ne pas avoir d'importance si toutes les lignes ont la même hauteur.
Et aussi, il existe une possibilité de déborder au-delà de la hauteur, n'est-ce pas le cas? Ensuite, comment pouvons-nous calculer en fonction du nombre de lignes?
J'ai fait quelques calculs.
TOP TOP CODE> VALUE LI>
- Obtenez le
Rembourrage-bas Code> Valeur Li>
- Obtenez le
Margin-top code> valeur li>
- Obtenez le
Marge-bas code> valeur li>
- Obtenez la
Border-Space Code> Valeur Li>
ol> Maintenant avec toutes ces informations, nous pouvons prendre le total des huigt et moins sur les pavés, les marges et les espaces frontaliers. P>
J'ai commenté dans le code sur ce que chaque ligne fait . p>
p>
<table>
<tr>
<td>Cell 1</td>
<td>Cell 2</td>
</tr>
</table>
<pre></pre>
A appris quelque chose de nouveau, pourriez-vous expliquer GETComputerStyle (Elemnt, NULL) un peu, (qu'est-ce que NULL fait)
@ Bankit the null est en fait un pseudoplement. Dans ce cas, nous n'en avons pas, alors j'ai défini est comme null. J'ai étudié cela à w3schools.com/jsref/jsref_getcomputedstyle.asp . Vous pouvez l'utiliser comme référence. C'est une option facultative.
Cela ne répond pas à la question, car il ne correspond pas à l'espacement des frontières. Il est également dangereux de supposer que les mesures vont toujours être en pixels.
@Brad fenêtre.getComp députétyle (elmnt, null) .getPropertyValue ('Top de rembourrage'); Var Paddedhe code> retournera toujours la valeur en pixels. Même si le rembourrage est dans
% code>, il obtiendra la valeur de pixel de celui-ci. Essayez de changer la valeur de rembourrage CSS à 5% et vous pouvez le voir.
@Gosi intéressant, ne savait pas ça! Merci pour l'information.
@Brad j'ai ajouté des calculs pour frontière-espace code> et a mis à jour la réponse. Maintenant, nous pouvons prendre une hauteur totale pour réduire le rembourrage, les marges et les espaces frontaliers.
Si vous souhaitez obtenir une hauteur de ligne de table précise, vous devez utiliser ollement.getboundingClientRect () code>
plutôt que élément.offSetheight code>
afin d'obtenir une hauteur fractionnée plutôt qu'une figure arrondie.
<table> <tr id="single"> <td>Cell</td> </tr> </table> <table> <tr id="top"> <td>Cell</td> </tr> <tr id="middle"> <td>Cell</td> </tr> <tr id="bottom"> <td>Cell</td> </tr> </table>
C'est plus précis ... mais c'était 1 pixel plus que dans la réalité.
Désolé a été gâché là-bas une seconde si vous devez l'obtenir, vous pouvez donner le tri un identifiant et utiliser getElementyid (). offsetheight p> p> p>
<table> <tr> <td>Cell 1</td> <td>Cell 2</td> </tr> </table>
Si la table peut être défilée .. La hauteur est nécessaire pour faire défiler l'endroit où plus précis autant que je puisse voir ... p> p> P>
Remarque: ce n'est pas aussi simple que
Clientheight code>,
offSetheight code> ou
Scrollheight code>. L'espacement des frontières sur la table entre en jeu. jsfiddle.net/xbtp1je8
@Tbrad pourquoi vous voulez inclure l'espacement des frontières? Techniquement, il ne compte pas dans la hauteur du
tr code>. C'est un espace vide entre deux
tr code>
@Tmaniafif Mon objectif est de déterminer la hauteur effective de la ligne d'utilisation dans une grille virtuelle avec des milliers de lignes, beaucoup de cellules. Il n'est pas rapide de mettre en milliers de rangées dans le DOM à la fois. Par conséquent, j'utilise une technique où seules les rangées visibles dans le volet de défilement (et quelques autour d'eux) sont affichées. Cela nécessite de connaître la hauteur exacte des pixels des rangées, y compris l'espacement des frontières. Sinon, le défilement sera désactivé un peu.
@Brad et pourquoi ne pas simplement lire la valeur de l'espacement des frontières et l'ajouter à la hauteur
tr code>?
@Temaniafif J'ai essayé cela, ce qui fonctionne pour la plupart, mais semble se briser un peu lors du zoom avant / sorti.
2px code> devient
1.75px code> d'une manière ou d'une autre. (Et c'est sans aucun ensemble explicite
Set d'espacement des frontières code>, juste la feuille de style par défaut.)
@Brad - Je pense que le problème de zoom est lié à l'utilisation de
offSetheight code> comme mesure de base puisqu'il renvoie un numéro arrondi. Vous pouvez utiliser
getboundingClientRect (). Hauteur code> pour renvoyer une hauteur fractionnée et éviter le problème de zoom (je pense).
@Benvc Excellentes informations, merci!