J'ai une collection d'éléments de bloc sur une page. Ils ont tous les règles CSS espace blanc, débordement, débordement de texte définies afin que le texte débordant soit rogné et qu'une ellipse soit utilisée.
Cependant, tous les éléments ne débordent pas.
Puis-je utiliser javascript pour détecter les éléments qui débordent?
Merci.
Ajouté: exemple de structure HTML avec laquelle je travaille.
<td><span>Normal text</span></td>
<td><span>Long text that will be trimmed text</span></td>
Les éléments SPAN tiennent toujours dans les cellules, ils ont la règle des points de suspension appliquée. Je veux détecter quand les points de suspension sont appliqués au contenu textuel du SPAN.
javascript
html
css
ellipsis
Deanoj
la source
la source
Réponses:
Il était une fois, j'avais besoin de le faire, et la seule solution fiable pour tous les navigateurs que je rencontrais était le travail de piratage. Je ne suis pas le plus grand fan de solutions comme celle-ci, mais cela produit certainement le résultat correct à maintes reprises.
L'idée est que vous clonez l'élément, supprimez toute largeur de délimitation et testez si l'élément cloné est plus large que l'original. Si c'est le cas, vous savez que cela va avoir été tronqué.
Par exemple, en utilisant jQuery:
J'ai fait un jsFiddle pour le démontrer, http://jsfiddle.net/cgzW8/2/
Vous pouvez même créer votre propre pseudo-sélecteur personnalisé pour jQuery:
Ensuite, utilisez-le pour trouver des éléments
Démo: http://jsfiddle.net/cgzW8/293/
Espérons que cela aide, aussi piraté que cela puisse être.
la source
white-space: nowrap
.Essayez cette fonction JS, en passant l'élément span comme argument:
la source
text-overflow:ellipsis
it should bee.offsetWidth <= e.scrollWidth
En plus de la réponse d'italo, vous pouvez également le faire en utilisant jQuery.
En outre, comme Smoky l'a souligné, vous souhaiterez peut-être utiliser jQuery externalWidth () au lieu de width ().
la source
Pour ceux qui utilisent (ou prévoient d'utiliser) la réponse acceptée de Christian Varga, veuillez être conscient des problèmes de performances.
Le clonage / manipulation du DOM de cette manière provoque le refoulement du DOM (voir une explication sur ici) qui est extrêmement gourmand en ressources.
L'utilisation de la solution de Christian Varga sur plus de 100 éléments d'une page a provoqué un délai de redistribution de 4 secondes pendant lequel le thread JS est verrouillé. Considérant que JS est monothread, cela signifie un retard UX significatif pour l'utilisateur final.
La réponse d' Italo Borssatto devrait être celle acceptée, elle a été environ 10 fois plus rapide lors de mon profilage.
la source
mouseenter
pour voir si une info-bulle doit être affichée.La réponse d' italo est très bonne! Cependant permettez-moi de l'affiner un peu:
Compatibilité entre navigateurs
Si, en fait, vous essayez le code ci-dessus et utilisez
console.log
pour imprimer les valeurs dee.offsetWidth
ete.scrollWidth
, vous remarquerez, sur IE, que, même lorsque vous n'avez pas de troncature de texte, une différence de valeur de1px
ou2px
est constatée.Alors, en fonction de la taille de police que vous utilisez, permettez une certaine tolérance!
la source
elem.offsetWdith VS ele.scrollWidth Ce travail pour moi! https://jsfiddle.net/gustavojuan/210to9p1/
la source
Cet exemple affiche une info-bulle sur un tableau de cellules avec du texte tronqué. Est dynamique en fonction de la largeur de la table:
Démo: https://jsfiddle.net/t4qs3tqs/
Cela fonctionne sur toutes les versions de jQuery
la source
Je pense que le meilleur moyen de le détecter est de l'utiliser
getClientRects()
, il semble que chaque rect a la même hauteur, nous pouvons donc calculer le nombre de lignes avec le nombre detop
valeurs différentes .getClientRects
travaille comme çagetRowRects
travaille comme çatu peux détecter comme ça
la source
Toutes les solutions n'ont pas vraiment fonctionné pour moi, ce qui a fonctionné était de comparer les éléments
scrollWidth
auxscrollWidth
de son parent (ou de son enfant, selon l'élément qui a le déclencheur).Lorsque l'enfant
scrollWidth
est plus élevé que ses parents, cela signifie qu'il.text-ellipsis
est actif.Quand
event
est l'élément parentQuand
event
est l'élément enfantla source
La
e.offsetWidth < e.scrollWidth
solution ne fonctionne pas toujours.Et si vous souhaitez utiliser du JavaScript pur, je vous recommande d'utiliser ceci:
(manuscrit)
la source
La solution @ItaloBorssatto est parfaite. Mais avant de regarder SO - j'ai pris ma décision. C'est ici :)
la source
Ma mise en œuvre)
la source
il y a quelques erreurs dans la démo http://jsfiddle.net/brandonzylstra/hjk9mvcy/ mentionnées par https://stackoverflow.com/users/241142/iconoclast .
dans sa démo, ajoutez ce code fonctionnera:
la source