gpt4 book ai didi

javascript - QuerySelector 在 HTML 导入时找不到模板

转载 作者:太空狗 更新时间:2023-10-29 15:04:00 27 4
gpt4 key购买 nike

我目前正在尝试学习如何使用最新稳定的 Chrome 52 来使用 Web 组件(不使用 Polymer)(我也在 Chrome 52 上使用 webcomponents.js polyfill 进行了尝试)。但是,当我这样做时,querySelector 似乎出错了。当我尝试通过 document.querySelector('#template') 在控制台中获取(诚然命名不当的模板 ID)时,它为空并且无法找到它。

我正在使用 this guide尽管有一些 ES6 语法。 (我也试过直接复制粘贴也是一样的问题)

我也尝试在 shadowDOM 中搜索,但它也不存在。

view.html

<template id="template">
<style>
</style>
<div class="container">
<h1>WZView</h1>
</div>
</template>
<script>
"use strict";

class WZView extends HTMLElement {

createdCallback () {
var root = this.createShadowRoot();
var template = document.querySelector('#template');
root.appendChild(document.importNode(template.content, true));
}

}

document.registerElement('wz-view', WZView);
</script>

index.html

<!DOCTYPE html>
<html>
<head>
<!--<script src="/bower_components/webcomponentsjs/webcomponents.js"></script>-->
<link rel="import" href="view.html">
</head>
<body>
<wz-view></wz-view>
</body>
</html>

控制台:

view.html:16 Uncaught TypeError: Cannot read property 'content' of null
> document.querySelector('#template')
null

最佳答案

<script> s 在导入的 HTML 中,不要使用 document.querySelector(...) .

使用:

// while inside the imported HTML, `currentDocument` should be used instead of `document`
var currentDocument = document.currentScript.ownerDocument;
...
// notice the usage of `currentDocument`
var templateInsideImportedHtml = currentDocument.querySelector('#template');

示例(修复问题中的示例):

var currentDocument = document.currentScript.ownerDocument; // <-- added this line

class WZView extends HTMLElement {
createdCallback () {
var root = this.createShadowRoot();
var template = currentDocument.querySelector('#template'); // <-- changed this line
root.appendChild(document.importNode(template.content, true));
}
}

兼容性:

只有 IE 11 won't support it .大多数browsers (including Edge) implement it , 以及 IE 10 and below there is a polyfill .

关于javascript - QuerySelector 在 HTML 导入时找不到模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37665122/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com