Cómo agregar dinámicamente un estilo para alinear texto usando jQuery


81

Estoy tratando de corregir los errores habituales de IE en CSS 2.1 y necesito una forma de alterar las propiedades de estilo de un elemento para agregar un estilo de alineación de texto personalizado.

Actualmente en jQuery puedes hacer algo como

$(this).width() or $(this).height() 

pero parece que no puedo encontrar una buena manera de alterar la alineación del texto con este mismo enfoque.

El elemento ya tiene una clase y configuré la alineación de texto en esa clase sin suerte. ¿Es posible simplemente agregar un atributo CSS de alineación de texto a este elemento después de que se define una clase?

Tengo algo como esto

$(this).css("text-align", "center"); 

justo después de mi ajuste de ancho y después de ver esto en firebug, veo que solo "ancho" es la única propiedad establecida en el estilo. ¿Alguna ayuda?

EDITAR:

¡Vaya, gran respuesta a esta pregunta! Un poco más de detalle sobre el problema en cuestión:

Estoy ajustando la fuente js para jqGrid A3.5 para hacer un trabajo de subcuadrícula personalizado y el JS real que estoy ajustando se muestra a continuación (lo siento por usar "esto" en mis ejemplos anteriores, pero quería mantener esto simple para brevedad)

var subGridJson = function(sjxml, sbid) {
    var tbl, trdiv, tddiv, result = "", i, cur, sgmap,
    dummy = document.createElement("table");
    tbl = document.createElement("tbody");
    $(dummy).attr({ cellSpacing: "0", cellPadding: "0", border: "0" });
    trdiv = document.createElement("tr");
    for (i = 0; i < ts.p.subGridModel[0].name.length; i++) {
        tddiv = document.createElement("th");
        tddiv.className = "ui-state-default ui-th-column";
        $(tddiv).html(ts.p.subGridModel[0].name[i]);
        $(tddiv).width(ts.p.subGridModel[0].width[i]);
        trdiv.appendChild(tddiv);
    }
    tbl.appendChild(trdiv);
}

Probé los dos siguientes (de las respuestas proporcionadas) sin suerte.

$(tddiv).width(ts.p.subGridModel[0].width[i]).attr('style', 'text-align: center');

Y

$(tddiv).width(ts.p.subGridModel[0].width[i]).css('text-align', 'center');

Continuaré trabajando en este problema hoy y publicaré una solución final para cualquiera que sienta mi dolor por este extraño problema.

Respuestas:


166

Tienes la idea correcta, como muestra la documentación:

http://docs.jquery.com/CSS/css#namevalue

¿Estás seguro de que identificas correctamente esto con class o id?

Por ejemplo, si su clase es myElementClass

$('.myElementClass').css('text-align','center');

Además, no he trabajado con Firebug en un tiempo, pero ¿estás mirando el dom y no el html? Javascript no cambia la fuente, pero el dominio sí. Mire en la pestaña dom y vea si se aplicó el cambio.


1
Debería funcionar, pero parece fallar cuando se usa junto con width () configurado previamente. La respuesta es usar el encadenamiento de jquery.
— Steerpike

42

También puede probar lo siguiente para agregar un estilo en línea al elemento:

$(this).attr('style', 'text-align: center');

Esto debería garantizar que otras reglas de estilo no anulen lo que pensaba que funcionaría. Creo que los estilos en línea suelen tener prioridad.

EDITAR: Además, otra herramienta que puede ayudarlo es Jash ( http://www.billyreisinger.com/jash/ ). Le brinda un símbolo del sistema de JavaScript para que pueda asegurarse de probar fácilmente las declaraciones de JavaScript y asegurarse de que está seleccionando el elemento correcto, etc.


12

Yo suelo usar

$(this).css({
    "textAlign":"center",
    "secondCSSProperty":"value" 
});

Espero que ayude


2

Creo que debería utilizar "textAlign" en lugar de "text-align".


6
Este solo sería el caso si se configura el estilo utilizando la manipulación DOM de JavaScript vanilla. jQuery css () usa palabras clave css reales en su lugar.
— garrow

2

Interesante. Tuve el mismo problema que tú cuando escribí una versión de prueba.

La solución es usar la capacidad de jquery para encadenar y hacer:

$(this).width(500).css("text-align", "center");

Aunque interesante hallazgo.

Para expandir un poco, lo siguiente no funciona

$(this).width(500);
$(this).css("text-align", "center");

y da como resultado que solo se establezca el ancho en el estilo. Encadenar los dos, como sugerí anteriormente, parece funcionar.


1

$(this).css("text-align", "center"); debería funcionar, asegúrese de que 'this' sea el elemento en el que está tratando de establecer el estilo de alineación de texto.


0

¿Es correcto?

<script>
$( "#box" ).one( "click", function() {
  $( this ).css( "width", "+=200" );
});
</script>

0
<!DOCTYPE html>
<html>
  <head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
    <script>
      $( document ).ready(function() {
      $this = $('h1');
         $this.css('color','#3498db');
         $this.css('text-align','center');
         $this.css('border','1px solid #ededed');
      });
    </script>

  </head>
  <body>
      <h1>Title</h1>
 </body>
</html>

0
 $(this).css({'text-align':'center'}); 

Puede usar el nombre de la clase y la identificación en lugar de esto

$('.classname').css({'text-align':'center'});

o

$('#id').css({'text-align':'center'});

-1

supongamos que a continuación está la etiqueta de párrafo html:

<p style="background-color:#ff0000">This is a paragraph.</p>

y queremos cambiar el color del párrafo en jquery.

El código del lado del cliente será:

<script>
$(document).ready(function(){
    $("p").css("background-color", "yellow");
});
</script> 

¿Mejora esto de alguna manera las respuestas dadas?
— Nico Haase

-1
function add_question () {var count = document.getElementById ("nofquest"). value; var container = document.getElementById ("contenedor"); // Borrar el contenido anterior del contenedor while (container.hasChildNodes ()) {container.removeChild (container.lastChild); } para (i = 1; i

cómo establecer el centro de los cuadros de texto


1. Formateo 2. ¿Puede darnos una explicación?
— jhpratt
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.