Comment interroger les éléments à l'intérieur de l'ombre DOM à partir de l'extérieur de Dart?
Comment puis-je sélectionner les nœuds à l'intérieur de l'ombre DOM? Considérons l'exemple suivant:
structure de "unshadowed" DOM
<app-element>
#shadow-root
<h2></h2>
<content>
#outside shadow
<h2></h2>
</content>
<ui-button>
#shadow-root
<h2></h2>
</ui-button>
</app-element>
index.html
<body>
<app-element>
<!-- OK: querySelect('app-element').querySelect('h2') -->
<!-- OK: querySelect('app-element h2') -->
<!-- There is no problem to select it -->
<h2>app-element > content > h2</h2>
</app-element>
</body>
templates.html
<polymer-element name="ui-button" noscript>
<template>
<!-- FAIL: querySelect('app-element::shadow ui-button::shadow h2') -->
<h2>app-element > ui-button > h2</h2>
</template>
</polymer-element>
<polymer-element name="app-element" noscript>
<template>
<!-- FAIL: querySelect('app-element::shadow').querySelect('h2') -->
<!-- FAIL: querySelect('app-element::shadow h2') -->
<!-- FAIL: querySelect('app-element').shadowRoot.querySelect('h2') -->
<h2>app-element > h2</h2>
<content></content>
<ui-button></ui-button>
</template>
</polymer-element>
Dans les commentaires comme "OK: querySelect()" je montre les sélecteurs j'ai essayé de l'exécuter à partir de l'extérieur toute l'ombre DOM.
J'ai déjà lu l'article suivant: http://www.html5rocks.com/en/tutorials/webcomponents/shadowdom-201/?redirect_from_locale=ru et repose sur le fait qu'il a été dit dans l'article, la requête comme: document.querySelector('app-element::shadow h2');
en JS devrait fonctionner comme prévu. Cependant dans Dart il ne fonctionne pas.
Que dois-je tort?
Vous devez vous connecter pour publier un commentaire.
Update2 (de commentaires)
Si vous utilisez un principal personnalisé, s'assurer que le Polymère est correctement initialisé avant d'essayer d'interagir avec vos Polymère éléments (voir comment mettre en œuvre une fonction principale dans le domaine des polymères apps pour plus de détails).
Habitude, je suggère d'éviter un principal personnalisé et créer un
app-element
(ou tout autre nom que vous préférez) et de mettre votre code d'initialisation dansattached
(assurez-vous d'appelersuper.attached();
) ou dansready()
(n'a pas besoin de super appel).Original
Il semble que dans ce cas, il n'est pas dans le shadow DOM, mais un enfant.
Cela devrait fonctionner:
C'est seulement dans l'ombre DOM quand il est à l'intérieur de vos éléments
<template>...</template>
pas quand vous la mettez dans la balise de votre élément personnalisé.Mise à jour
Si vous voulez la recherche
à l'intérieur de l'ombre DOM de l'élément courant
à l'intérieur de l'ombre DOM d'un élément à l'intérieur de l'ombre DOM
de l'extérieur de l'élément courant
querySelector...
code? Dans la main, dans laAppElement
classe, où, dans la classe?::shadow
et combinator/deep/
affecter les éléments. Cependant, il n'a pas de sens lorsque j'utilise DartquerySelect(All)
fonctions. Seulement h2 à l'intérieur de<content>
balise est accessible. Quel est le problème?main() {}
::shadow
et/deep/
ont été supprimées en Chrome 63.Pseudo-sélecteur de
::shadow
et combinator/deep/
ne fonctionne pas sur firefox.Utilisation
.shadowRoot