¿Hay alguna manera de seleccionar / manipular pseudo-elementos CSS como ::before
y ::after
(y la versión anterior con un punto y coma) usando jQuery?
Por ejemplo, mi hoja de estilo tiene la siguiente regla:
.span::after{ content:'foo' }
¿Cómo puedo cambiar 'foo' a 'bar' usando jQuery?
javascript
jquery
css
jquery-selectors
pseudo-element
JBradwell
fuente
fuente
Respuestas:
También puede pasar el contenido al pseudo elemento con un atributo de datos y luego usar jQuery para manipular eso:
En HTML:
En jQuery:
En CSS:
Si desea evitar que aparezca el 'otro texto', puede combinar esto con la solución de seucolega como esta:
En HTML:
En jQuery:
En CSS:
fuente
attr
función contra lacontent
propiedad? Me sorprende que nunca haya oído hablar de esto ...attr()
, lástima que no pude usarlo con otras propiedades que no seancontent
. Demostraciónattr()
todavía no se ha implementado ningún navegador más allá de CSS2, mientras que en CSS2attr()
solo se ha definido para lacontent
propiedad.:before
, es compatibleattr()
con CSSPensarías que esta sería una pregunta simple de responder, con todo lo demás que jQuery puede hacer. Desafortunadamente, el problema se reduce a un problema técnico: css: after y: before las reglas no son parte del DOM y , por lo tanto, no pueden modificarse utilizando los métodos DOM de jQuery.
No son formas de manipular estos elementos utilizando JavaScript y / o CSS soluciones; cuál usa depende de sus requisitos exactos.
Voy a comenzar con lo que se considera ampliamente el "mejor" enfoque:
1) Agregar / eliminar una clase predeterminada
En este enfoque, ya ha creado una clase en su CSS con un estilo
:after
o:before
estilo diferente . Coloque esta clase "nueva" más adelante en su hoja de estilo para asegurarse de que anula:Luego, puede agregar o eliminar fácilmente esta clase utilizando jQuery (o JavaScript de vainilla):
Mostrar fragmento de código
:before
o:after
no es completamente dinámico2) Agregue nuevos estilos directamente a la hoja de estilo del documento
Es posible usar JavaScript para agregar estilos directamente a la hoja de estilo del documento, incluidos los estilos
:after
y:before
. jQuery no proporciona un atajo conveniente, pero afortunadamente el JS no es tan complicado:Mostrar fragmento de código
.addRule()
y los.insertRule()
métodos relacionados están bastante bien soportados hoy.Como variación, también puede usar jQuery para agregar una hoja de estilo completamente nueva al documento, pero el código necesario no es más limpio:
Mostrar fragmento de código
Si estamos hablando de "manipular" los valores, no solo agregarlos, también podemos leer los estilos existentes
:after
o:before
usar un enfoque diferente:Mostrar fragmento de código
Podemos reemplazar
document.querySelector('p')
con$('p')[0]
cuando usamos jQuery, para un código ligeramente más corto.3) Alterar un atributo DOM diferente
También puede usar
attr()
en su CSS para leer un atributo DOM particular. ( Si un navegador es compatible:before
, también lo esattr()
) . Al combinar esto concontent:
un CSS cuidadosamente preparado, podemos cambiar el contenido (pero no otras propiedades, como el margen o el color):before
y:after
dinámicamente:JS:
Mostrar fragmento de código
Esto se puede combinar con la segunda técnica si el CSS no se puede preparar con anticipación:
Mostrar fragmento de código
attr
en CSS solo se puede aplicar a cadenas de contenido, no a URL o colores RGBfuente
Aunque los navegadores los representan a través de CSS como si fueran como otros elementos DOM reales, los pseudoelementos en sí no son parte del DOM, porque los pseudoelementos, como su nombre lo indica, no son elementos reales, y por lo tanto no puede selecciónelos y manipúlelos directamente con jQuery (o cualquier API de JavaScript para el caso, ni siquiera la API de Selectores ). Esto se aplica a todos los pseudoelementos cuyos estilos está intentando modificar con un script, y no solo
::before
y::after
.Solo puede acceder a los estilos de pseudoelementos directamente en tiempo de ejecución a través de CSSOM (think
window.getComputedStyle()
), que no está expuesto por jQuery más allá.css()
, un método que tampoco admite pseudoelementos.Sin embargo, siempre puede encontrar otras formas de evitarlo, por ejemplo:
Aplicando los estilos a los pseudoelementos de una o más clases arbitrarias, luego alternando entre clases (vea la respuesta de seucolega para un ejemplo rápido): esta es la forma idiomática ya que utiliza selectores simples (que no son pseudoelementos) distinguir entre elementos y estados de elementos, la forma en que están destinados a ser utilizados
Manipular los estilos que se aplican a dichos pseudoelementos, alterando la hoja de estilo del documento, que es mucho más que un truco
fuente
No puede seleccionar pseudo elementos en jQuery porque no son parte de DOM. Pero puede agregar una clase específica al elemento padre y controlar sus pseudo elementos en CSS.
EJEMPLO
En jQuery:
En CSS:
fuente
También podemos confiar en propiedades personalizadas (también conocidas como variables CSS) para manipular el pseudo-elemento. Podemos leer en la especificación que:
Considerando esto, la idea es definir la propiedad personalizada dentro del elemento y el pseudo-elemento simplemente la heredará; así podemos modificarlo fácilmente.
1) Usando estilo en línea :
2) Usar CSS y clases
3) Usar javascript
4) Usando jQuery
También se puede usar con valores complejos:
Puede notar que estoy considerando la sintaxis
var(--c,value)
dondevalue
está el valor predeterminado y también llamado el valor de reserva.De la misma especificación podemos leer:
Y después:
Si no establecemos la propiedad personalizada O la establecemos en
initial
O si contiene un valor no válido, se utilizará el valor de reserva. El uso deinitial
puede ser útil en caso de que queramos restablecer una propiedad personalizada a su valor predeterminado.Relacionado
¿Cómo almacenar el valor de herencia dentro de una propiedad personalizada CSS (también conocida como variables CSS)?
Propiedades personalizadas de CSS (variables) para el modelo de caja
Tenga en cuenta que las variables CSS pueden no estar disponibles en todos los navegadores que considere relevantes (por ejemplo, IE 11): https://caniuse.com/#feat=css-variables
fuente
En la línea de lo que sugiere Christian, también podrías hacer:
fuente
Aquí está la forma de acceder: después y: antes de las propiedades de estilo, definidas en css:
fuente
SI desea manipular los elementos :: before o :: after sudo completamente a través de CSS, puede hacerlo JS. Vea abajo;
Observe cómo el
<style>
elemento tiene una ID, que puede usar para eliminarlo y agregarlo nuevamente si su estilo cambia dinámicamente.De esta manera, su elemento es el estilo exactamente como lo desea a través de CSS, con la ayuda de JS.
fuente
Una manera funcional pero no muy eficiente es agregar una regla al documento con el nuevo contenido y hacer referencia a ella con una clase. dependiendo de lo que se necesite, la clase podría necesitar una identificación única para cada valor en el contenido.
fuente
Aquí está el HTML:
El estilo calculado en 'antes' era
content: "VERIFY TO WATCH";
Aquí están mis dos líneas de jQuery, que utilizan la idea de agregar una clase adicional para hacer referencia específica a este elemento y luego agregar una etiqueta de estilo (con una etiqueta! Important) para cambiar el CSS del valor de contenido del elemento sudo:
$("span.play:eq(0)").addClass('G');
$('body').append("<style>.G:before{content:'NewText' !important}</style>");
fuente
¡Gracias a todos! logré hacer lo que quería: D http://jsfiddle.net/Tfc9j/42/ aquí eche un vistazo
Quería que la opacidad de un div externo fuera diferente de la opacidad del div interno y que cambiara con un clic en alguna parte;) ¡Gracias!
fuente
append
, el usohtml
es mejor prevenirPuede crear una propiedad falsa o usar una existente y heredarla en la hoja de estilo del pseudo-elemento.
Parece que no funciona para la propiedad "contenido" :(
fuente
Esto no es práctico ya que no escribí esto para usos del mundo real, solo para darle un ejemplo de lo que se puede lograr.
esto actualmente agrega a / o agrega un elemento Style que contiene los atributos necesarios que tendrán efecto en el elemento objetivo después del Pseudo elemento.
esto se puede usar como
y
como after: y before: los pseudo elementos no son accesibles directamente a través de DOM, actualmente no es posible editar los valores específicos de css libremente.
mi manera fue solo un ejemplo y no es bueno para la práctica, puedes modificarlo para probar algunos de tus propios trucos y corregirlo para el uso en el mundo real.
¡así que haz tu propia experimentación con esto y otros!
saludos - Adarsh Hegde.
fuente
Siempre estoy agregando mi propia función de utilidades, que se ve así.
o haga uso de las características de ES6:
fuente
¿Por qué agregar clases o atributos cuando solo puede agregar un
style
encabezado?fuente
Aquí hay muchas respuestas, pero ninguna respuesta ayuda a manipular el CSS de
:before
o:after
, ni siquiera el aceptado.Así es como me propongo hacerlo. Supongamos que su HTML es así:
Y luego está configurando su: antes en CSS y diseñándolo como:
Tenga en cuenta que también configuro el
content
atributo en el elemento mismo para que pueda eliminarlo fácilmente más adelante. Ahora hay unbutton
clic en el que desea cambiar el color de: antes a verde y su tamaño de fuente a 30px. Puede lograr eso de la siguiente manera:Defina un CSS con su estilo requerido en alguna clase
.activeS
:Ahora puede cambiar el estilo: before agregando la clase a su elemento: before de la siguiente manera:
Si solo desea obtener contenido
:before
, puede hacerlo como:En última instancia, si desea cambiar dinámicamente el
:before
contenido mediante jQuery, puede lograrlo de la siguiente manera:Al hacer clic en el botón "cambiar antes" cambiará el
:before
contenido#something
a '22', que es un valor dinámico.Espero que ayude
fuente
Hice uso de variables definidas en el
:root
interiorCSS
para modificar el pseudo-elemento:after
(lo mismo se aplica a:before
) , en particular para cambiar el valor de un estilo definido por y el valor de otro ( ) en la siguiente demostración que genera colores aleatorios mediante JavaScript / jQuery:background-color
anchor
.sliding-middle-out:hover:after
content
anchor
#reference
HTML
CSS
JS / jQuery
fuente
attr()
excepto encontent
, es realmente escaso. Puede consultar caniuse.com para ello.:root
y el soporte de css-variables es mejor, pero aún no está tan extendido ya que el soporte es bastante nuevo. (también verifique el soporte en caniuse.com)He creado un complemento jQuery para agregar css-pseudo reglas como usar
.css()
elementos específicos.uso:
fuente
fuente
Puedes usar mi plugin para este propósito.
JQuery:
Los valores deben especificarse, como en la función normal de jQuery.css
Además, también puede obtener el valor del parámetro pseudoelemento, como en la función normal de jQuery.css:
JS:
Mostrar fragmento de código
GitHub: https://github.com/yuri-spivak/managing-the-properties-of-pseudo-elements/
fuente
Alguien más comentó sobre agregar al elemento head con un elemento de estilo completo y eso no está mal si solo lo está haciendo una vez, pero si necesita restablecerlo más de una vez, terminará con una tonelada de elementos de estilo. Entonces, para evitar eso, creé un elemento de estilo en blanco en la cabeza con una identificación y reemplacé el innerHTML de esta manera:
Entonces el JavaScript se vería así:
Ahora, en mi caso, necesitaba esto para establecer la altura de un elemento anterior en función de la altura de otro y cambiará al cambiar el tamaño, así que usando esto puedo ejecutar
setHeight()
cada vez la ventana y reemplazará<style>
correctamente.Espero que ayude a alguien que estaba atrapado tratando de hacer lo mismo.
fuente
Tengo algo diferente para ti que es fácil y efectivo.
fuente