Вот jsfiddle, показывающий поведение.
Я ожидал, что смогу вставить элементы option
в точку вставки в Shadow DOM, но, поскольку select
пуст, я не думаю, что это происходит. Инспектор Chrome в любом случае не очень полезен с точками вставки, но я убедился, что мой браузер работает при выполнении других действий с точками вставки, например. ничего, кроме вставки option
элементов в select
.
Я определяю пользовательский элемент следующим образом:
var CatpantsProto = Object.create(HTMLElement.prototype);
CatpantsProto.createdCallback = function(e) {
var shadow = this.createShadowRoot();
var t = document.getElementById('guy');
var clone = document.importNode(t.content, true);
shadow.appendChild(clone);
};
document.registerElement('cat-pants', {
prototype: CatpantsProto
});
Вот шаблон #guy
:
<template id="guy">
<span>Before</span>
<select>
<content></content>
</select>
<span>After</span>
</template>
Вот использование:
<cat-pants>
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
</cat-pants>
Опять же, я ожидал, что эти элементы option
будут вставлены в select
в Shadow DOM, но они не отображаются, когда я открываю раскрывающийся список.
Я подумал, что, может быть, проблема в том, чтобы «получить» из HTMLElement
, но это не сработает, если я также реализую HTMLSelectElement
.
Я также экспериментировал с тем, чтобы не использовать шаблон и изменять innerHTML
shadow
напрямую, но это тоже не сработало.
В настоящее время я думаю, что элементы option
просто недействительны за пределами select
s, datalist
s или optgroup
s, и браузер выдает какую-то подгонку, но не сообщает мне об этом.
Я в растерянности и, вероятно, обойду это, создав второй заполнитель элемента item
, который преобразуется в элементы option
в моем createdCallback
. Арх.