Ordenación del selector con id y selectores de clase, espacio después del selector de id
Una breve actualización: Conseguí poner los selectores en el orden correcto usando 'selectors.unshift(idSelector)' en lugar de 'selectors.add(idSelector)' en el ejemplo anterior. Ahora sigo teniendo el problema del espacio que falta entre los selectores de id y clase. Hasta ahora no encontraba la forma de acceder a 'S...
Lee la respuesta completa abajo ↓Pregunta
Actualmente estoy trabajando en una aplicación web para la que integramos este proyecto como editor de interfaz gráfica para personalizar los entornos.
Nuestros componentes GUI se cargan y analizan desde la base de datos. Podemos identificar, por ejemplo, un botón, una cuadrícula de datos, etc., mediante un ID (por ejemplo, '_17190fbd-13d6-430f-bb32-1a09d2151a77'). Estos componentes se construyen a partir de varios elementos HTML anidados mediante un framework que añade clases para el estilo.
Mi objetivo ahora es acceder a estos elementos internos de GrapesJS con algo como '#ancestor-id .framework-class1.framework-class2' (por ejemplo, '#_17190fbd-13d6-430f-bb32-1a09d2151a77 .my-text-label')
Añado los selectores de id a cada elemento anidado después de cargar el lienzo:
'allComponents.forEach((component: any) => {'
' const ancestorId = this.getAncestorId(component);'
' const idSelector = selectorManager.add('#${ ancestorId }');'
' selectores const = component.getSelectors();'
' selectors.add(idSelector);'
});
Mi problema ahora es que los selectores de clase aparecen antes de mi selector de Ancestor-ID. Esto da lugar a un selector completo como '.my-text-label#_17190fbd-13d6-430f-bb32-1a09d2151a77' en lugar de '#_17190fbd-13d6-430f-bb32-1a09d2151a77 .my-text-label' con el espacio entre el id y las clases.
¿Alguien tiene idea de dónde o cómo podría cambiar este comportamiento?
Muchas gracias por tu apoyo.
Respuestas (3)
Una breve actualización:
Conseguí poner los selectores en el orden correcto usando 'selectors.unshift(idSelector)' en lugar de 'selectors.add(idSelector)' en el ejemplo anterior.
Ahora sigo teniendo el problema del espacio que falta entre los selectores de id y clase.
Hasta ahora no encontraba la forma de acceder a 'Selectors.getFullString(..)' para cambiar el comportamiento
Hola @dintifla SelectorManager no está pensado para funcionar así (solo puedes tener una mezcla de clases '.class1.class2' pero no con IDs), pero sinceramente no entiendo cuál es tu objetivo usando SelectorManager. Si necesitas consultar un componente en el editor, puedes hacer esto simplemente 'anyParentComponent.find('#my-id .my-class')[0]'
Hola @artf gracias por tu respuesta. Al final no se trata solo de consultar un componente, sino de generar el CSS para él. No necesito el HTML porque mi aplicación está diseñada en una aplicación cliente enriquecida, almacenada en una representación abstracta en la base de datos y luego analizada en un DOM. Como resultado, no puedo usar los IDs generados por GrapesJS, ya que no tengo posibilidad de almacenar HTML (ni ninguna otra representación del DOM).
Al final, espero que todas mis reglas se vean así: '#top-level-component-id .my-class { ...}`
quizá como ejemplo sencillo, el HTML generado de un botón:
'''html
<div id="_4b9c8f66-85d3-4488-8e23-5932bc3e8420" clase="dx-botón dx-botón-normal dx-widget dx-botón-has-texto-dx-button-mode-contained" role="botón" aria-etiqueta="x" tabindex="0"> <div class="dx-button-content"><span class="dx-button-text">Cerrar</span></div> </div> ``` para cambiar la etiqueta de ese botón específico mi CSS se vería así: '#_4b9c8f66-85d3-4488-8e23-5932bc3e8420 .dx-button-text {...}`Preguntas y respuestas relacionadas
Continúa investigando con debates sobre temas similares.
Issue #2624
[BUG] Los estilos generados no se escapan de dos puntos en los nombres de clase
Actualmente uso GrapeJS para un proyecto en el que estoy trabajando localmente y lo integré con algunos componentes de la interfaz de Tailw...
Issue #2282
[Editor UI]: Sustituye la Vista actual por los componentes principales de la interfaz del editor
¡Hola! La estructura actualmente utilizada de grapesjs se basa en aprovechar backbonejs concept de vista modelo para implementar el Virtual...
Issue #1902
[PREGUNTAS] Desactivar/cambiar el comportamiento de los componentes integrados
Hola, Intentando conseguir trabajo de GrapesJ para un proyecto en el que estoy trabajando actualmente. ¿Pero hay alguna forma de desactivar...
Issue #3421
[PREGUNTA] Cómo eliminar la regla CSS del selector de clases
Estoy usando componentFirst configurado en true para que mis usuarios apliquen el estilo necesario al componente que seleccionaron. Selecci...
Plugins de pago que cumplen con este problema
Seleccionado por temas clave y relevancia de etiquetas para ayudarte a enviar más rápido.
Cargando recomendaciones de plugins de pago...
Consulta los plugins de código abierto de GrapesJS en GitHub O haz una búsqueda rápida en nuestro catálogo gratuito.
Explora plugins gratuitos →Los plugins premium incluyen soporte, actualizaciones regulares y funciones listas para producción — ahorrando días de trabajo de integración.
Explora plugins premium →Explorar categorías de plugins
Ve directamente a las páginas de categorías de plugins en el marketplace.