无关的mark:Chrome浏览器的控制台提供了$(selector)和$$(selector),分别是querySelector() 和 querySelectorAll的一个快速的替代 ,这和jquery无关,所以诸如jquery.parent()啥的是用不了的。
想不到H5这么强大,和angular里面的ng-repeat的效果是类似的已经支持了(类似,就是没有数据绑定,不过也可以模拟),那就是。
HTML
元素 是一种用于保存客户端内容的机制,该内容在页面加载时不被渲染,但可以在运行时使用JavaScript进行实例化。
可以将一个模板视为正在被存储以供随后在文档中使用的一个内容片段。
虽然, 在加载页面的同时,解析器确实处理 元素的内容,这样做只是确保这些内容是有效的; 然而,元素的内容不会被渲染。
参考MDN,先运行以下代码
<html>
<table id="producttable">
<thead>
<tr>
<td>UPC_Codetd>
<td>Product_Nametd>
tr>
thead>
<tbody>
<template id="productrow">
<tr>
<td class="record">td>
<td>td>
tr>
template>
tbody>
table>
html>
可以看到重复的部分用#document-fragment
标记了
直接在console运行以下代码,添加数据
// 通过检查来测试浏览器是否支持HTML模板元素
// 用于保存模板元素的内容属性。
if ('content' in document.createElement('template')) {
// 使用现有的HTML tbody实例化表和该行与模板
let t = document.querySelector('#productrow'),
td = t.content.querySelectorAll("td");
td[0].textContent = "1235646565";
td[1].textContent = "Stuff";
// 克隆新行并将其插入表中
let tb = document.getElementsByTagName("tbody");
let clone = document.importNode(t.content, true);
tb[0].appendChild(clone);
// 创建一个新行
td[0].textContent = "0384928528";
td[1].textContent = "Acme Kidney Beans";
// 克隆新行并将其插入表中
let clone2 = document.importNode(t.content, true);
tb[0].appendChild(clone2);
}
注意:要操作template里面的dom,不能直接用template,要通过template.content
才行。
那想将template部分保存为一个文件,方便复用要怎么呢?
实际上在WebComponents
草案中,引入了rel="import"
的LINK标签,这是用于载入外部HTML资源的,可以解决上面的问题。
如下代码,参考自HTML Imports。
1.需要导入template保存为file.html
,代码如下
<div class="warning">
<style>
h3 {
color: red !important;
}
style>
<h3>Warning!h3>
<p>This page is under constructionp>
div>
<div class="outdated">
<h3>Heads up!h3>
<p>This content may be out of datep>
div>
2.将file.html
引入main.html
,可通过在添加
,又或者通过JS将
file.html
引入main.html
if ('import' in document.createElement('link')) {
//
var link = document.createElement('link');
link.rel = 'import';
link.href = 'file.html';
//link.setAttribute('async', ''); // 异步
//link.onload = function(e) {};
//link.onerror = function(e) {};
document.head.appendChild(link);
}
通过 引入的
template
可以看到#document-fragment
在的内部。
3.然后就是将template的内容添加到dom上。
if ('content' in document.createElement('template')) {
var link = document.querySelector('link[rel="import"]');
var content = link.import;
// Grab DOM from warning.html's document.
var el = content.querySelector('.warning');
document.body.appendChild(el.cloneNode(true));
}
4.往template里面添加数据,这一步就是正常操作。
注意:要操作import里面的dom,要通过link.import
才行。
低版本的chrome需要通过chrome://flags/
开启该特性才能运行。
Access to Imported resource at ‘file:///C:/Users/TR/Desktop/import.html’ from origin ‘null’ has been blocked by CORS policy: Invalid response. Origin ‘null’ is therefore not allowed access.
如果要在本地运行时,需要允许跨域访问,参考chrome浏览器的跨域设置——包括版本49前后两种设置。
1.在电脑上新建一个目录,例如:C:\MyChromeDevUserData
2.在属性页面中的目标输入框里加上 –disable-web-security –user-data-dir=C:\MyChromeDevUserData,–user-data-dir的值就是刚才新建的目录。
3.点击应用和确定后关闭属性页面,并打开chrome浏览器。