在导入的文件中,无法通过id找到模板

时间:2015-06-11 20:38:26

标签: javascript html5 custom-element

我正在创建简单的自定义元素,我想从分离的文件中导入它。当它在同一个文件中时t给出了正确的html元素,但当它在外部文件中时它是undefined。这是我的index.html文件:

<!DOCTYPE html>  
<html lang="en">  
  <head>
    <meta charset="utf-8">
    <link rel="import" href="example-container.html">
  </head>
  <body>
    <example-container></example-container>
  </body>
</html>

example-container.html

<template id="example-container">
    <style>
    </style>
</template>
<script>  
    // Make sure you extend an existing HTMLElement prototype
    var ExampleContainerProto = Object.create(HTMLElement.prototype);

    //var t = document.querySelector('#example-container');

    // Setup optional lifecycle callbacks
    ExampleContainerProto.createdCallback = function() {
        var t = document.querySelector('#example-container');
        console.log(t);
    };
    var ExampleContainer = document.registerElement('example-container', {prototype: ExampleContainerProto});
</script>

我的另一种方法是在全局范围内定义t,如下所示:

var t = document.querySelector('#wizard-container');
WizardContainerProto.createdCallback = function() {
    console.log(t);
...

它工作正常,但我不想在全球范围内留下垃圾。

1 个答案:

答案 0 :(得分:1)

使用导入时,全局document对象引用父页面(index.html),而不是导入的页面(example-container.html)。您可以使用document.currentScript.ownerDocument获取导入的文档。所以,看起来你正在查询错误的文档。

请参阅HTML5Rocks上的HTML Imports - #include for the web