Tengo una clase con la pantalla configurada en none
Me gustaría en Javascript ahora configúrelo en inline
Soy consciente de que puedo hacer esto con una identificación con getElementById
, pero ¿cuál es la forma más limpia de hacerlo con una clase ?¿Cambiar CSS de clase en Javascript?
Respuesta
Usted puede hacer que — realmente cambiar las reglas relacionadas con el estilo de una clase — utilizando el styleSheets
array (MDC link, MSDN link), pero, francamente, eres probablemente sea mejor (como dice changelog) tener un estilo separado que defina el display: none
y luego quitar ese estilo de los elementos cuando ya no los ocultes.
mejor manera de hacerlo es tener una clase oculta, así:
.hidden { display: none; }
Después de eso, no es un atributo className
a todos los elementos de JavaScript. Puede manipular esa cadena para eliminar las apariciones de la clase hidden
y agregar otra.
Un consejo: use jQuery. Hace que sea más fácil lidiar con ese tipo de cosas, puede hacerlo como:
$('#element_id').removeClass('hidden').addClass('something');
Pfft! ¿Qué no es Javascript sobre jQuery? ;-) – changelog
¿El hecho de que el código específico de jQuery no funcione en JS simple, si jQuery no está incluido? "Usar jQuery" no siempre es una respuesta válida para todas las preguntas sobre JS, y estoy seguro de que algunas personas se cansan de escucharlo. – cHao
En general, su respuesta no debe presentar jQuery si no se mencionó en la pregunta. Si realmente desea incluir jQuery, debe responder en JavaScript sin formato y agregar un "... sin embargo, en jQuery, se vería así:" – meagar
¿Se refiere a algo como esto?
var elements = document.getElementsByClassName('hidden-class');
for (var i in elements) {
if (elements.hasOwnProperty(i)) {
elements[i].className = 'show-class';
}
}
A continuación, el CSS
.hidden-class { display: none; }
.show-class { display: inline; }
Afirmaciones que no hay ningún método como 'getElementsByClassName' para' document' – Skizit
Hrm, no es compatible con [IE más antiguo] (http://www.quirksmode.org/dom/w3c_core.html#fivemethods). Honestamente, recomendaría algo como jQuery, pero sería criticado cada vez que lo sugiriera. – Znarkus
@Zharkus: No es dañino recomendar utilizar una biblioteca como * adjunto * o posdata a una respuesta que no lo requiera (dijo uno de los criticados); es cuando alguien responde una pregunta que no es jQuery con una respuesta puramente jQuery que es apropiada. @Skizit: una biblioteca ilke [jQuery] (http://jquery.com), [Prototype] (http://prototypejs.org), [YUI] (http://developer.yahoo.com/yui/), [Closure] (http://code.google.com/closure/library), o [cualquiera de varios más] (http://en.wikipedia.org/wiki/List_of_JavaScript_libraries) puede suavizar las diferencias del navegador para usted, y proporcionar muchas utilidades útiles. –
Puede usar getElementsByClassName
en el que obtendrá una variedad de elementos. Sin embargo, esto no está implementado en navegadores más antiguos. En esos casos, getElementsByClassName
es undefined
por lo que the code has to iterate through elements and check which ones have the desired class name.
Para ello, debe utilizar un marco de JavaScript, como jQuery, Mootools, prototipos, etc.
En jQuery que se podía hacer con una sola línea como esta:
$('.theClassName').css('display', 'inline')
puede crear nueva regla de estilo en su lugar.
var cssStyle = document.createElement('style');
cssStyle.type = 'text/css';
var rules = document.createTextNode(".YOU_CLASS_NAME{display:hidden}");
cssStyle.appendChild(rules);
document.getElementsByTagName("head")[0].appendChild(cssStyle);
$("#YOUR_DOM_ID").addClass("YOUR_CLASS_NAME");
Es posible que quiera explotar/reescribir esta función:
function getStyleRule(ruleClass, property, cssFile) {
for (var s = 0; s < document.styleSheets.length; s++) {
var sheet = document.styleSheets[s];
if (sheet.href.endsWith(cssFile)) {
var rules = sheet.cssRules ? sheet.cssRules : sheet.rules;
if (rules == null) return null;
for (var i = 0; i < rules.length; i++) {
if (rules[i].selectorText == ruleClass) {
return rules[i].style[property];
//or rules[i].style["border"]="2px solid red";
//or rules[i].style["boxShadow"]="4px 4px 4px -2px rgba(0,0,0,0.5)";
}
}
}
}
return null;
}
- para escanear todas las hojas de estilo pase adjunto "" como tercer argumento, de lo contrario algo así como "index.css"
- ruleClass contiene el inicio '.'
- si (reglas [i] .selectorText & & normas [i] .selectorText.split (''). IndexOf (propiedad)! == -1) mejora la condición encontrar aquí https://stackoverflow.com/a/16966533/881375
- no se olvide de use la sintaxis de JavaScript sobre las propiedades CSS, por ejemplo caja-sombra vs.boxShadow
finalmente, una buena respuesta :) Lo edité y agregué una entrada de "valor" para cambiar inmediatamente la regla –
Aunque esto es cosa del pasado, aquí algunas observaciones:
o El uso de "display: inline" para hacer las cosas visibles de nuevo puede estropear el flujo de la página. Algunos elementos se muestran en línea, otros bloquean, etc. Esto debe conservarse. Por lo tanto, solo defina un estilo .hidden y elimínelo para hacer que las cosas sean visibles nuevamente.
o Cómo ocultar: Hay (al menos) dos formas de ocultar elementos, una es la "pantalla: ninguna" que hace que el elemento se comporte como si no estuviera allí, y la "visibilidad: oculta" "que hace que el elemento sea invisible pero mantiene el espacio que ocupa. Dependiendo de lo que desea ocultar, la visibilidad puede ser una mejor opción, ya que otros elementos no se moverán al mostrar u ocultar un elemento.
o Agregar/eliminar clases vs. manipular reglas CSS: El resultado es bastante diferente. Si manipulas las reglas de CSS, todos los elementos que tienen una determinada clase de CSS se ven afectados, ahora y en el futuro, es decir, los nuevos elementos agregados dinámicamente al DOM también están ocultos, mientras que cuando agregas o quitas una clase, debes asegurarte de que los elementos añadidos también tienen la clase añadida/eliminada. Entonces, yo diría que agregar/eliminar clases funciona bien para HTML estático, mientras que manipular reglas CSS podría ser una mejor opción para los elementos DOM creados dinámicamente.
- 1. JavaScript onClick cambiar css
- 2. javascript - cambiar el estilo de una clase
- 3. Cambiar valores de CSS con Javascript
- 4. Cambiar la clase css para todos los elementos con dicha clase con Javascript
- 5. CSS/Javascript Mostrar/Ocultar DIV usando una clase de CSS?
- 6. Cambiar el estilo de una clase completa de CSS mediante javascript
- 7. ¿Alterar los atributos de la clase CSS con javascript?
- 8. Cambiar condicionalmente la clase CSS en la vista Razor
- 9. Cambiar la clase CSS después de desplazarse 1000px hacia abajo
- 10. ¿Puede JavaScript cambiar el valor de @page CSS?
- 11. Uso de Javascript para detectar Google Chrome para cambiar CSS
- 12. JavaScript: cómo cambiar el estilo CSS del tramo creado?
- 13. Poner Javascript en CSS
- 14. JavaScript Cursor Cambiar (y cambiar de nuevo)
- 15. ¿Cómo cambiar la clase de CSS de un elemento de página HTML utilizando ASP.NET?
- 16. Cambiar la clase css de textbox cuando la validación de ASP.NET falla
- 17. Cambiar CSS dinámicamente
- 18. cambio de definición de clase CSS
- 19. Agregar clase CSS en RowDataBound
- 20. Cambiar la propiedad de color de fondo de una clase con javascript/jQuery
- 21. Css/images/javascript en codeigniter
- 22. ¿Agregar clase Css a todos los elementos <input type'text '>? Javascript/Css?
- 23. Herencia de clase en Javascript
- 24. variable de clase en Javascript
- 25. Variables de clase en Javascript
- 26. Cambiar el tipo de medio css en el navegador
- 27. fijar condicionalmente clase CSS
- 28. jQuery fadeIn clase de CSS
- 29. Obtener ruta URL relativa en CSS Javascript
- 30. de análisis de CSS en JavaScript/jQuery
Solo para referencia futura, porque creo que se parece mucho a lo que desea: http://www.hunlock.com/blogs/Totally_Pwn_CSS_with_Javascript – Zirak