Как выбрать вложенные элементы с помощью <content select = "">

В Chrome 44 я пытаюсь создать теневой DOM, который отображает определенный набор дочерних узлов теневого хоста.
В следующем коде <content select="a"> часть выбирает только два из трех <a> элементы.

<div id=a>
    <a>1</a>
    <span><a>2</a></span>
    <a>3</a>
</div>

<template id=b>
    <content select="a"></content>
</template>

<script>
shRoot = document.getElementById('a').createShadowRoot() ;
shRoot.appendChild( document.importNode(document.getElementById('b').content, true) ) ;
</script>

Как я могу выбрать все элементы, которые я хочу, независимо от того, вложены они или нет?
Есть ли ограничение в отношении того, какие элементы выбираются?

3 ответа

Решение

Это не ошибка в реализации тега содержимого, это действительно так.

Как объясняется здесь, в статье HTML5Rocks о теневом DOM 101:

Примечание: select может выбирать только те элементы, которые являются непосредственными дочерними элементами узла узла. То есть вы не можете выбирать потомков (egselect="table tr").

Поэтому селекторы контента при реализации нацелены только на непосредственные дочерние элементы, а не на вложенные элементы.

Это может быть ошибка в Chrome, вы также пробовали это в Firefox с включенным флагом веб-компонентов?

Что еще более важно, этот метод выбора элементов уходит в пользу метода "именованных слотов". Я пока не знаю, попал ли он в какие-либо браузеры. Это может не стоить больших проблем, чтобы решить эту проблему.

Я думаю, это потому, что один из тегов привязки не является прямым потомком элемента div, в котором он находится.

Другие вопросы по тегам