Jak mogę wybrać węzły w cieniu DOM? Rozważmy następujący przykład:Jak wyszukiwać elementy w cieniu DOM z zewnątrz w Dart?
strukturę "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>
W komentarzach typu "OK: querySelect()" pokazuję selektory, które próbowałem uruchomić spoza dowolnego zacienionego DOM.
Przeczytałem już następujący artykuł: http://www.html5rocks.com/en/tutorials/webcomponents/shadowdom-201/?redirect_from_locale=ru i na podstawie faktu, że zostało to powiedziane w artykule, zapytanie takie jak: document.querySelector('app-element::shadow h2');
w JS powinno działać zgodnie z oczekiwaniami. Jednak w Dart nie działa.
Co mam nie tak?
Gdzie jest twój ... '' querySelector kod? W zasadzie w klasie "AppElement", gdzie w klasie? –
Używanie CSS wszystko działa zgodnie z oczekiwaniami: pseudo selektor taki jak ':: shadow' i kombinator'/deep/'wpływa na elementy. Jednak nie ma sensu, gdy używam funkcji 'querySelect (All) Dart'a. Tylko h2 wewnątrz '' jest osiągalny. Co jest nie tak? –
Kod w 'main() {}' –