Il fut un temps où j'avais besoin de faire cela, et la seule solution fiable pour tous les navigateurs que j'ai trouvée était hack job. Je ne suis pas le plus grand fan de ce genre de solution, mais elle produit certainement le bon résultat à chaque fois.
L'idée est de cloner l'élément, de supprimer toute largeur de délimitation et de tester si l'élément cloné est plus large que l'original. Si c'est le cas, vous savez qu'il a été tronqué.
Par exemple, en utilisant jQuery :
var $element = $('#element-to-test');
var $c = $element
.clone()
.css({display: 'inline', width: 'auto', visibility: 'hidden'})
.appendTo('body');
if( $c.width() > $element.width() ) {
// text was truncated.
// do what you need to do
}
$c.remove();
J'ai fait un jsFiddle pour démontrer cela, http://jsfiddle.net/cgzW8/2/
Vous pouvez même créer votre propre pseudo-sélecteur personnalisé pour jQuery :
$.expr[':'].truncated = function(obj) {
var $this = $(obj);
var $c = $this
.clone()
.css({display: 'inline', width: 'auto', visibility: 'hidden'})
.appendTo('body');
var c_width = $c.width();
$c.remove();
if ( c_width > $this.width() )
return true;
else
return false;
};
Utilisez-le ensuite pour trouver des éléments
$truncated_elements = $('.my-selector:truncated');
Démonstration : http://jsfiddle.net/cgzW8/293/
J'espère que ça vous aidera, même si c'est un peu compliqué.
15 votes
Pas un doublon ! Cette question porte sur un élément dans un autre, l'élément parent. Je parle du texte dans un seul élément. Dans mon cas, le SPAN dans le TD ne déborde jamais le TD, c'est le texte dans le SPAN qui déborde, et est coupé. C'est ce que j'essaie de détecter ! Désolé - j'aurais pu mieux poser ma question, je l'admets.
0 votes
Oh, j'ai oublié d'ajouter - ceci ne doit fonctionner que sur webkit si cela peut aider...
0 votes
J'ai fait Ghommey juste pour voir si ça marchait... ça ne marchait pas.
0 votes
L'aspect ellipse n'est pas pertinent ; tout ce que vous devez détecter, c'est s'il y a débordement.