当一切正常时,为什么importNode不执行?

时间:2017-07-08 20:04:35

标签: javascript html import html-imports html5-template

我想使用HTML导入,所以我创建了两个文件 文件1:

<!DOCTYPE html>
<html>
<head>
    <style>
        div {
            height: 300px;
            width: 300px;
            background-color: yellow;
        }
    </style>
</head>
<body>
    <div></div>
</body>
</html>

文件2:

<!DOCTYPE html>
<html>
<head>
    <link rel='import' href='test.html' id='LINK'>
    <script>
        var LINK = document.getElementById('LINK');
        var test = LINK.import;
        var content = document.importNode(test.content, true);
        document.body.appendChild(content);

    </script>
</head>
<body>        
</body>
</html>

当我执行File2时,我应该看到一个黄色方块,但我得到了这个错误:

Uncaught TypeError: Failed to execute 'importNode' on 'Document': parameter 1 is not of type 'Node'. at Import.html:8

当我记录&#34;测试&#34;变量到控制台,我得到包含File1的文档,所以它很好。我只是不知道错误应该是什么意思以及为什么它不起作用。

1 个答案:

答案 0 :(得分:1)

当你写:

var content = document.importNode(test.content, true);

...您认为test<template>元素。

因此,在您导入的文档中,您应该有一个<template>元素。

的test.html:

<html>
<head>
    <style>
        div {
            height: 300px;
            width: 300px;
            background-color: yellow;
        }
    </style>
</head>
<body>
    <template><div></div></template>
</body>
</html>

在主文件中,使用querySelector()(或其他选择器功能)来获取模板:

var LINK = document.getElementById('LINK');
var test = LINK.import.querySelector('template');
var content = document.importNode(test.content, true);
...