keksmen
@keksmen
Just a programmer

Как найти элемент в импортируемом документе?

Здравствуйте. Решил попробовать в деле концепцию web components. Есть код:
<template id="load-task">
    <div class="load-task">
        <div class="load-task-name">
            <content></content>
        </div>
        <div class="load-task-progress">
            <div class="load-task-progress-inner"></div>
        </div>
    </div>
</template>

И есть JS логика:
var template=document.querySelector('#load-task');
var loadTask=Object.create(HTMLElement.prototype, {});
loadTask.progress=0;
loadTask.state=0;
var getState=function(n) {
    if (n>0) return 'success';
    if (n<0) return 'fail';
    return '';
};
var attribs={
    progress:function(oldV,newV) {
        this.querySelector('.load-task-progress-inner').style.width=progress+'%';
    },
    state:function(oldV,newV) {
        var _state=getState(oldV);
        if (_state.length>0&&this.classList.contains(_state))
            this.classList.remove(_state);
        _state=getState(newV);
        if (_state.length>0&&!this.classList.contains(_state))
            this.classList.add(_state);
    }
};
loadTask.createdCallback=function() {
    var shadow = this.createShadowRoot();
    shadow.resetStyleInheritance = true;
    shadow.appendChild(template.content);
    for (var name in attribs)
        attribs[name].call(this,undefined,this[name]);
};
loadTask.attributeChangedCallback=function(name, oldV, newV) {
    if (!!attribs[name])
        attribs[name].call(this,oldV,newV);
};
document.registerElement('load-task', { prototype: loadTask });


При запуске сего кода всё работает хорошо, но стоит подключить его к другому при помощи link rel="import" как всё ломается.
Обращаем внимание на первую строку логики
var template=document.querySelector('#load-task');
По не понятным мне причинам в импортируемых документах не находятся вообще никакие элементы и не важно в каком месте их объявить. Поиск в интернетах ничего не дал.
Подкажите, пожалуйста, как решить проблему.
  • Вопрос задан
  • 2390 просмотров
Решения вопроса 1
vixwork
@vixwork
programmer
var templat=document.currentScript.ownerDocument.querySelector('#load-task');
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Kofi
@Kofi
Сначала обратитесь к содержимому импорта:
var content = link.import;
var template = content.querySelector('#load-task');
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы