Est-il possible d'accéder à l'Ombre des éléments du DOM à travers le document parent?
Cette question est plus destiné à l'utilisateur créé à l'ombre des éléments du DOM, mais pour l'accessibilité, je vais utiliser l' date
type d'entrée pour cette question:
Dire par exemple j'ai un date
des commentaires sur ma page. Avec un couple de bits édité, le shadow DOM balisage pour cela (à l'aide de Chrome) ressemble à quelque chose comme:
<input type="date">
#document-fragment
<div pseudo="-webkit-datetime-edit">
<div pseudo="-webkit-datetime-edit-fields-wrapper">
<span role="spinbutton">dd</span>
<div pseudo="-webkit-datetime-edit-text">/</div>
<span role="spinbutton">mm</span>
<div pseudo="-webkit-datetime-edit-text">/</div>
<span role="spinbutton">yyyy</span>
</div>
</div>
<div></div>
<div pseudo="-webkit-calendar-picker-indicator"></div>
Les méthodes et les propriétés associées à la date
d'entrée ne semble pas faire référence à l'ombre DOM à tous (JSFiddle), donc je me demandais comment (le cas échéant) peut-il l'ombre d'éléments DOM y accéder?
- Votre question est de savoir comment accéder aux éléments du DOM au sein du shadow DOM? Aussi votre JSFiddle est incomplète.
- Non, comment accéder à l'ombre des éléments du DOM à travers le shadow DOM du document parent.
<script>/*Access here*/</script><input type="date" <!-- shadow DOM --> />
. Incomplète?
Vous devez vous connecter pour publier un commentaire.
int32_t
est juste que Shadow DOM, par définition, est un moyen de combler un nœud avec DOM que vous souhaitez masquer à partir de sources externes (L'Encapsulation). Le point est que vous comme l'auteur de composant de choisir exactement quelles parties seront exposés à l'extérieur de CSS ou de JavaScript et qui ne le seront pas.Malheureusement, vous ne pouvez pas créer un public JavaScript interface de votre Ombre DOM sans l'aide d'un autre saignement-bord spec appelé Les Éléments Personnalisés. Si vous choisissez de le faire, c'est aussi simple que l'ajout de méthodes publiques de votre élément de prototype. À partir de ces vous pouvez accéder à l'intérieur de votre Ombre DOM (voir le troisième exemple ici).
Vous pouvez, cependant, exposer les crochets pour les CSS pour accéder à l'intérieur de votre Ombre DOM sans l'aide des Éléments Personnalisés. Il y a deux façons de le faire:
Pseudo-éléments
Chrome et Firefox exposer certaines parties de leur Ombre DOM CSS grâce à des pseudo-éléments. Voici votre exemple de la
date
de saisie avec l'ajout d'une règle CSS qui s'applique uniquement à la partie numérique de la zone de la date grâce à l'utilisation de google Chrome-fourni-webkit-datetime-edit
pseudo-élément.Voici une liste partielle des WebKit pseudo-éléments. Vous pouvez aussi activer le
Show Shadow DOM
option dans DevTools et de regarder pour les attributs nomméspseudo
.Composant les auteurs peuvent également créer leur propre pseudo-éléments à exposer les parties de leur Ombre DOM (voir le 2ème exemple ici).
CSS Variables
Une meilleure façon de le faire est d'utiliser CSS Variables, que vous pouvez activer avec
Enable experimental WebKit features
dansabout:flags
dans google Chrome. Alors découvrez ce violon qui utilise CSS Variables de communiquer à l'Ombre DOM de quelle couleur il doit utiliser pour son thème"."Maintenant (2016), vous pouvez accéder à ouvrir créés par l'utilisateur ombre des éléments du DOM (mais pas de l'agent utilisateur créé shadow DOM!) à l'aide de la méthode
querySelector
sur le Shadow DOM racine:JS:
HTML:
Vous ne pouvez pas accéder au contenu de l'Ombre DOM à partir de scripts en dehors de l'Ombre DOM. L'Encapsulation est le but de l'Ombre DOM.
Oui. Vous avez juste à appeler .racine ou .shadowRoot . Voici un exemple,
Vous n'obtiendrez pas l'ombre de l'élément dom sans innerText ou innerHTML sur le parent de l'élément dom.