Estoy tratando de usar jquery para escribir una función rápida que calcule el ancho de píxel de una cadena en una página html, luego trunca la cadena hasta que alcance un ancho de píxel ideal ...Truncar texto con jQuery basado en el ancho de píxel
sin embargo no está funcionando (el texto no trunca) ...
Aquí está el código que tengo:
function constrain(text, original, ideal_width){
var temp_item = ('<span class="temp_item" style="display:none;">'+ text +'</span>');
$(temp_item).appendTo('body');
var item_width = $('span.temp_item').width();
var ideal = parseInt(ideal_width);
var smaller_text = text;
while (item_width > ideal) {
smaller_text = smaller_text.substr(0, (smaller_text-1));
$('.temp_item').html(text);
item_width = $('span.temp_item').width();
}
var final_length = smaller_text.length;
if (final_length != original) {
return (smaller_text + '…');
} else {
return text;
}
}
Así es como estoy llamando desde la página:
$('.service_link span:odd').each(function(){
var item_text = $(this).text();
var original_length = item_text.length;
var constrained = constrain(item_text, original_length,175);
$(this).html(constrained);
});
¿Alguna idea sobre lo que estoy haciendo mal? Si hay una manera de hacerlo más rápido (es decir, tipo burbuja), eso sería genial también.
Gracias!
No veo nada, obviamente, mal con las declaraciones que causarían que falle en los artículos siguientes. ¿Seguro que su selector se está aplicando a varios elementos? (también, no olvide marcar mi respuesta como una solución si cree que se lo merece =)) –
Funciona rápidamente en Safari, pero lleva demasiado tiempo en Firefox ... cualquier forma de hacer la declaración while más ¿eficiente? – novon
BTW - Lo tengo trabajando en todos moviendo el: var temp_item = ('' + text + ''); $ (temp_item) .appendTo ('cuerpo'); En el exterior de la función ... pero el problema de velocidad en Firefox y los navegadores más lentos aún persiste. Gracias por la ayuda hasta ahora – novon