Estoy tratando de calcular el ancho del texto usando jQuery. No estoy seguro de qué, pero definitivamente estoy haciendo algo mal.
Entonces, aquí está el código:
var c = $('.calltoaction');
var cTxt = c.text();
var cWidth = cTxt.outerWidth();
c.css('width' , cWidth);
Respuestas:
Esto funcionó mejor para mí:
fuente
'</span>'
, aunque no parece hacer una diferencia (funcionó con o sin él en FF9).Aquí hay una función que es mejor que otras publicadas porque
<input>
,<span>
o"string"
.Demostración: http://jsfiddle.net/philfreo/MqM76/
fuente
Mi solución
Básicamente una mejora con respecto a Rune, que no se usa
.html
tan a la ligerafuente
/
paréntesis antes del cierre de la<span>
etiqueta:calculator = $('<span style="display: inline-block;" />'),
Las
textWidth
funciones proporcionadas en las respuestas y que aceptan astring
como argumento no tendrán en cuenta los espacios en blanco iniciales y finales (no se representan en el contenedor ficticio). Además, no funcionarán si el texto contiene algún marcado html (una subcadena<br>
no producirá ningún resultado y
devolverá la longitud de un espacio).Esto es solo un problema para las
textWidth
funciones que aceptan astring
, porque si se proporciona un elemento DOM y.html()
se invoca sobre el elemento, entonces probablemente no haya necesidad de arreglar esto para tal caso de uso.Pero si, por ejemplo, está calculando el ancho del texto para modificar dinámicamente el ancho de un
input
elemento de texto a medida que el usuario escribe (mi caso de uso actual), probablemente querrá reemplazar los espacios iniciales y finales con
y codificar la cadena a html.Usé la solución de philfreo, así que aquí hay una versión que corrige esto (con comentarios sobre adiciones):
fuente
font-size
. Tuve que agregarcss('font-size'), this.css('font-size'))
para que funcionara. ¿Alguna idea de por quéfont
solo no copia ese valor?.css
método existente , pero veo que mis corchetes están mal. Debería sercss('font-size', this.css('font-size'))
.Las funciones de ancho de jQuery pueden ser un poco turbias al intentar determinar el ancho del texto debido a modelos de caja inconsistentes. La forma segura sería inyectar div dentro de su elemento para determinar el ancho real del texto:
Para usar este mini complemento, simplemente:
fuente
span
, obtienes cero. Probé esta solución en unH2
, donde los elementos principales se han desbordado oculto, y solo obtengo la longitud truncada del texto. ¿Quizás una explicación de cómo se supone que funciona esto ayudaría a que funcione mejor?Encontré que esta solución funciona bien y hereda la fuente de origen antes de dimensionar:
fuente
org.css("font-weight")
. Además, diría que laif(!text)
parte no es intuitiva. Si utilizo, por ejemplo,jQuery("#someContainer").textWidth("Lorem ipsum")
me gustaría saber el ancho del texto de "Lorem ipsum" cuando se aplica en ese contenedor en particular.Ni Rune ni Brain funcionaban para mí en caso de que el elemento que sostenía el texto tuviera un ancho fijo. Hice algo similar a Okamera. Utiliza menos selectores.
EDITAR: Probablemente no funcione para elementos que usan relativo
font-size
, ya que el siguiente código inserta elhtmlCalc
elemento en, por lobody
tanto, pierde la información sobre la relación de los padres.fuente
this
ya es un objeto jQuery, por lo que$(this)
es redundante.Si intentas hacer esto con texto en un cuadro de selección o si esos dos no funcionan, prueba este en su lugar:
o
si quieres tomar el texto primero
fuente
Lo que está haciendo mal es que está llamando a un método en cTxt, que es una cadena simple y no un objeto jQuery. cTxt es realmente el texto contenido.
fuente
Ligero cambio a Nico, ya que .children () devolverá un conjunto vacío si hacemos referencia a un elemento de texto como h1 o p . Entonces usaremos .contents () en su lugar, y usaremos esto en lugar de $ (this) ya que estamos creando un método en un objeto jQuery.
fuente
Después de perseguir a un fantasma durante dos días, tratando de averiguar por qué el ancho de un texto era incorrecto, me di cuenta de que se debía a los espacios en blanco en la cadena de texto que detenían el cálculo del ancho.
por tanto, otro consejo es comprobar si los espacios en blanco están causando problemas. utilizar
espacio sin rupturas y ver si eso lo arregla.
las otras funciones sugeridas por la gente también funcionan bien, pero son los espacios en blanco los que causan problemas.
fuente
white-space: nowrap
al CSS en línea para evitar esto.Si está tratando de determinar el ancho de una combinación de nodos de texto y elementos dentro de un elemento dado, necesita envolver todo el contenido con wrapInner () , calcular el ancho y luego desenvolver el contenido.
* Nota: También necesitará extender jQuery para agregar una función unsrapInner () ya que no se proporciona por defecto.
fuente
Ampliando la respuesta de @ philfreo:
Agregué la capacidad de verificar
text-transform
, ya que cosas comotext-transform: uppercase
generalmente tienden a ensanchar el texto.fuente
fuente
Llame a getColumnWidth () para obtener el texto. Esto funciona perfectamente bien.
Nota: - Si desea .css en línea, pase los detalles de la fuente solo en estilo.
fuente
Modifiqué el código de Nico para que funcionara según mis necesidades.
Estoy usando .contents () ya que .children () no devuelve los nodos de texto que necesitaba. También descubrí que el ancho devuelto se vio afectado por el ancho de la ventana gráfica que estaba causando el ajuste, así que estoy usando espacio en blanco: nowrap; para obtener el ancho correcto independientemente del ancho de la ventana gráfica.
fuente
casi una línea. Te da el con del primer personaje
fuente
No pude hacer que ninguna de las soluciones enumeradas funcionara al 100%, así que se me ocurrió este híbrido , basado en ideas de @chmurson (que a su vez se basó en @Okamera) y también de @philfreo:
Notas:
this
dentro de un método de extensión jQuery ya es un objeto jQuery, por lo que no es necesario todo lo extra$(this)
que tienen muchos ejemplos.white-space: nowrap
, solo para asegurarse de que lo mida como una sola línea (y no un ajuste de línea basado en otro estilo de página).font
solo y tuve que copiar explícitamentefont-size
también. No estoy seguro de por qué todavía (todavía estoy investigando).@philfreo
.fuente
A veces también necesita medir adicionalmente la altura y no solo el texto , sino también el ancho de HTML . Tomé la respuesta de @philfreo y la hice más flexible y útil:
fuente
el ancho del texto puede ser diferente para diferentes padres, por ejemplo, si agrega un texto en la etiqueta h1, será más ancho que div o etiqueta, por lo que mi solución es la siguiente:
fuente
Tuve problemas con soluciones como las de @ rune-kaagaard para grandes cantidades de texto. Descubrí esto:
JSFiddle GitHub
fuente
creo que deberías usar
$('.calltoaction').val;
Además, estaría usando id (#) en lugar de una clase para eso ... si tienes más de una de esas clases, ¿cómo lo manejaría?
fuente