Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

366
Visualizações
Shadowroot: Adjuntar controladores de eventos jquery a múltiples elementos bajo shadowRoot

Así que estoy usando un complemento de jQuery en shadowRoot en mi aplicación. El html es el siguiente

 #shadow-root <div id="container"> <div class="display-item">Item 1</div> <div class="display-item">Item 2</div> <div class="display-item">Item 3</div> <div class="display-item">Item 4</div> </div>

Quiero adjuntar detectores de eventos a los divs con class = "display-item" para eventos como mousedown,mousedown,focus. Intenté lo siguiente:

 let root = document.getElementById(divID).shadowRoot; $(root).on('mousedown', '#container div.display-item', function(event) { //function });

Pero esto no funciona. ¿Cómo podría hacer que esto funcione?

EDITAR :

También probé este enfoque, algo así como $('#container .display-item'), pero no funcionaría ya que está buscando esos elementos en el documento que creo y no los encontraría ya que están bajo la sombra. DOM, entonces tengo que usar la raíz como pivote. ¿Existe un equivalente del método 'buscar' de jquery en el que pueda consultar varios elementos con la misma clase, usando la raíz de la sombra como pivote? De esa forma, puedo adjuntar detectores de eventos a los elementos individuales de forma explícita.

over 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

En el mundo ideal, los componentes web deberían preocuparse por el mundo "exterior",
y, sobre todo, el Exterior no debe depender del mundo interior de los Componentes Web.

  • Eso significa que el componente debe encargarse de adjuntar oyentes.

  • Dado que tiene el control de lo que hace el Componente, no es necesario addEventListener (permitiendo múltiples oyentes iguales)

 customElements.define("my-component", class extends HTMLElement { constructor() { super().attachShadow({mode: "open"}) .innerHTML = `<div id="container"> <div class="display-item">Item 1</div> <div class="display-item">Item 2</div> <div class="display-item">Item 3</div> <div class="display-item">Item 4</div> </div>`; } listen() { this.shadowRoot.querySelectorAll('.display-item').forEach(div => { div.onclick = (evt) => { document.body.append(div.innerText); } }); this.listen = () => console.warn("ran attach listener once"); } })
 <my-component id=COMP></my-component> <script> window.onload=()=>{ document.querySelector("#COMP").listen(); } </script>

Nota: IE9 fue el último navegador en implementar JS queryselectors... en 2011

Si solo usa jQuery para su $() , ha cargado a sus clientes con una descarga no requerida de más de 80 KB durante los últimos 11 años.

Si realmente quieres tocar el mundo interior

 document.querySelector("#COMP").shadowRoot.querySelectorAll('.display-item').forEach

hace el truco, pero se rompe cuando hay más shadowRoots en el medio.

Y en mi mundo no le digo a los Componentes qué hacer,
Hago que los componentes escuchen :

 window.onload=()=>{ document.dispatchEvent("LISTEN"); }
over 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Assistente virtual