简体   繁体   English

如何在HTML中使用HTML中的模板列表?

[英]How to use a Template-List from HTML in Javascript?

I have a Template on HTML and a JSON array of objects and Im trying with the Objects from array to create a List using the Template. 我有一个HTML模板和一个JSON对象数组,我尝试使用数组中的对象创建一个使用模板的列表。 The list looks different because I think I am not using the template. 该列表看起来有所不同,因为我认为我没有使用模板。 Does anybody know how can I use it? 有人知道我该怎么用吗?

 listOfBirds = document.querySelector("#bird-list").innerHTML; theList = document.querySelector(".bird-list"), obj = JSON.parse(listOfBirds); let img = document.createElement("img"), name = document.createElement("name"), latinName = document.createElement("latinName"); name.innerHTML = obj[i].name; name.className = "bird-name"; latinName.innerHTML = obj[i].latinName; latinName.className = "bird-latin-name"; img.src = obj[i].imagePath; img.className = "bird-image"; item.appendChild(img); item.appendChild(name); item.appendChild(latinName); theList.appendChild(item); 
 <script type="text/template" id="bird-list-entry"> <li class="bird-list-entry" bird-id="<%= id %>"> <img src="<%= imagePath %>" class="bird-image" /> <div class="bird-description"> <span class="bird-name"><%= name %></span> <span class="bird-latin-name"><%= latinName %></span> </div> <span class="add-bird-button"> <i class="fa fa-plus-circle" aria-hidden="true"></i> </span> </li> </script> <script type="text/template" id="bird-list"> [{ "id":1, "name":"Haussperling", "latinName":"Passer domesticus", "imagePath":"resources/images/haussperling.png", "audioPath":"resources/data/audio/haussperling.ogg" },{ "id":2, "name":"Kohlmeise", "latinName":"Parus major", "imagePath":"resources/images/kohlmeise.png", "audioPath":"resources/data/audio/kohlmeise.ogg" },{ "id":3, "name":"Star", "latinName":"Sturnus vulgaris", "imagePath":"resources/images/star.png", "audioPath":"resources/data/audio/star.ogg" },{ "id":4, "name":"Amsel", "latinName":"Turdus merula", "imagePath":"resources/images/amsel.png", "audioPath":"resources/data/audio/amsel.ogg" },{ "id":5,"name":"Blaumeise", "latinName":"Cyanistes caerruleus", "imagePath":"resources/images/blaumeise.png", "audioPath":"resources/data/audio/blaumeise.ogg" },{ "id":6, "name":"Elster", "latinName":"Pica pica", "imagePath":"resources/images/elster.png", "audioPath":"resources/data/audio/elster.ogg" },{ "id":7, "name":"Grünfink", "latinName":"Chloris chloris", "imagePath":"resources/images/gruenfink.png", "audioPath":"resources/data/audio/gruenfink.ogg" },{ "id":8, "name":"Mehlschwalbe", "latinName":"Delichon urbicum", "imagePath":"resources/images/mehlschwalbe.png", "audioPath":"resources/data/audio/mehlschwalbe.ogg" },{ "id":9, "name":"Mauersegler", "latinName":"Apus apus", "imagePath":"resources/images/mauersegler.png", "audioPath":"resources/data/audio/mauersegler.ogg" },{ "id":10, "name":"Buchfink", "latinName":"Fringilla coelebs", "imagePath":"resources/images/buchfink.png", "audioPath":"resources/data/audio/buchfink.ogg" },{ "id":11, "name":"Ringeltaube", "latinName":"Columba palumbus", "imagePath":"resources/images/ringeltaube.png", "audioPath":"resources/data/audio/ringeltaube.ogg" },{ "id":12, "name":"Feldsperling", "latinName":"Passer montanus", "imagePath":"resources/images/feldsperling.png", "audioPath":"resources/data/audio/feldsperling.ogg" },{ "id":13, "name":"Türkentaube", "latinName":"Streptopelia decaocto", "imagePath":"resources/images/tuerkentaube.png", "audioPath":"resources/data/audio/tuerkentaube.ogg" },{ "id":14, "name":"Rauchschwalbe", "latinName":"Hirundo rustica", "imagePath":"resources/images/rauchschwalbe.png", "audioPath":"resources/data/audio/rauchschwalbe.ogg" },{ "id":15, "name":"Rotkehlchen", "latinName":"Erithacus rubecula", "imagePath":"resources/images/rotkehlchen.png", "audioPath":"resources/data/audio/rotkehlchen.ogg"}] </script> 

I had to make a few changes but this code works. 我必须进行一些更改,但是此代码有效。

For the HTML template I changed from <script type="text/template" id="bird-list-entry"> to <template id="bird-list-entry"> which is supported in all newer browsers but not any version of Internet Explorer. 对于HTML模板,我从<script type="text/template" id="bird-list-entry">更改为<template id="bird-list-entry">在所有较新的浏览器中均受支持,但没有任何版本Internet Explorer。 I also remove all of the <%= name%> things since they are not needed in the template. 我还删除了所有<%= name%>内容,因为模板中不需要它们。

I changed the JavaScript: 我更改了JavaScript:

  • load the template correctly. 正确加载模板。
  • Loop through your array of objects. 遍历对象数组。
  • Clone the template for each entry in the array 克隆数组中每个条目的模板
  • Get the sub elements from the cloned template 从克隆的模板中获取子元素
  • Change the attributes and attributes in the cloned template 更改克隆模板中的属性和属性
  • Add the cloned and modified template into the list. 将克隆和修改后的模板添加到列表中。

 var listOfBirds = document.querySelector("#bird-list").innerHTML; var objList = JSON.parse(listOfBirds); var theList = document.querySelector(".bird-list"); var template = document.querySelector("#bird-list-entry").content; objList.forEach( obj => { let item = template.cloneNode(true); let li = item.querySelector("li"); let img = item.querySelector("img"); let name = item.querySelector(".bird-name"); let latinName = item.querySelector(".bird-latin-name"); li.setAttribute('bird-id', obj.id); name.innerHTML = obj.name; latinName.innerHTML = obj.latinName; img.src = obj.imagePath; theList.appendChild(item); } ); 
 <template id="bird-list-entry"> <li class="bird-list-entry"> <img class="bird-image" /> <div class="bird-description"> <span class="bird-name"></span> <span class="bird-latin-name"></span> </div> <span class="add-bird-button"> <i class="fa fa-plus-circle" aria-hidden="true"></i> </span> </li> </template> <script type="text/template" id="bird-list"> [{"id":1,"name":"Haussperling","latinName":"Passer domesticus","imagePath":"resources/images/haussperling.png","audioPath":"resources/data/audio/haussperling.ogg"},{"id":2,"name":"Kohlmeise","latinName":"Parus major","imagePath":"resources/images/kohlmeise.png","audioPath":"resources/data/audio/kohlmeise.ogg"},{"id":3,"name":"Star","latinName":"Sturnus vulgaris","imagePath":"resources/images/star.png","audioPath":"resources/data/audio/star.ogg"},{"id":4,"name":"Amsel","latinName":"Turdus merula","imagePath":"resources/images/amsel.png","audioPath":"resources/data/audio/amsel.ogg"},{"id":5,"name":"Blaumeise","latinName":"Cyanistes caerruleus","imagePath":"resources/images/blaumeise.png","audioPath":"resources/data/audio/blaumeise.ogg"},{"id":6,"name":"Elster","latinName":"Pica pica","imagePath":"resources/images/elster.png","audioPath":"resources/data/audio/elster.ogg"},{"id":7,"name":"Grünfink","latinName":"Chloris chloris","imagePath":"resources/images/gruenfink.png","audioPath":"resources/data/audio/gruenfink.ogg"},{"id":8,"name":"Mehlschwalbe","latinName":"Delichon urbicum","imagePath":"resources/images/mehlschwalbe.png","audioPath":"resources/data/audio/mehlschwalbe.ogg"},{"id":9,"name":"Mauersegler","latinName":"Apus apus","imagePath":"resources/images/mauersegler.png","audioPath":"resources/data/audio/mauersegler.ogg"},{"id":10,"name":"Buchfink","latinName":"Fringilla coelebs","imagePath":"resources/images/buchfink.png","audioPath":"resources/data/audio/buchfink.ogg"},{"id":11,"name":"Ringeltaube","latinName":"Columba palumbus","imagePath":"resources/images/ringeltaube.png","audioPath":"resources/data/audio/ringeltaube.ogg"},{"id":12,"name":"Feldsperling","latinName":"Passer montanus","imagePath":"resources/images/feldsperling.png","audioPath":"resources/data/audio/feldsperling.ogg"},{"id":13,"name":"Türkentaube","latinName":"Streptopelia decaocto","imagePath":"resources/images/tuerkentaube.png","audioPath":"resources/data/audio/tuerkentaube.ogg"},{"id":14,"name":"Rauchschwalbe","latinName":"Hirundo rustica","imagePath":"resources/images/rauchschwalbe.png","audioPath":"resources/data/audio/rauchschwalbe.ogg"},{"id":15,"name":"Rotkehlchen","latinName":"Erithacus rubecula","imagePath":"resources/images/rotkehlchen.png","audioPath":"resources/data/audio/rotkehlchen.ogg"}] </script> <ul class="bird-list"></ul> 

UPDATE UPDATE

Since you can not use the <template> tag here is the same code using the <script> tag: 由于您不能使用<template>标记,因此以下是使用<script>标记的相同代码:

 var listOfBirds = document.querySelector("#bird-list").innerHTML; var objList = JSON.parse(listOfBirds); var theList = document.querySelector(".bird-list"); var template = document.createElement('template'); template.innerHTML = document.querySelector("#bird-list-entry").innerHTML; objList.forEach( obj => { let item = template.content.cloneNode(true); let li = item.querySelector("li"); let img = item.querySelector("img"); let name = item.querySelector(".bird-name"); let latinName = item.querySelector(".bird-latin-name"); li.setAttribute('bird-id', obj.id); name.innerHTML = obj.name; latinName.innerHTML = obj.latinName; img.src = obj.imagePath; theList.appendChild(item); } ); 
 <script type="text/template" id="bird-list-entry"> <li class="bird-list-entry" bird-id="<%= id %>"> <img src="<%= imagePath %>" class="bird-image" /> <div class="bird-description"> <span class="bird-name"><%= name %></span> <span class="bird-latin-name"><%= latinName %></span> </div> <span class="add-bird-button"> <i class="fa fa-plus-circle" aria-hidden="true"></i> </span> </li> </script> <script type="text/template" id="bird-list"> [{"id":1,"name":"Haussperling","latinName":"Passer domesticus","imagePath":"resources/images/haussperling.png","audioPath":"resources/data/audio/haussperling.ogg"},{"id":2,"name":"Kohlmeise","latinName":"Parus major","imagePath":"resources/images/kohlmeise.png","audioPath":"resources/data/audio/kohlmeise.ogg"},{"id":3,"name":"Star","latinName":"Sturnus vulgaris","imagePath":"resources/images/star.png","audioPath":"resources/data/audio/star.ogg"},{"id":4,"name":"Amsel","latinName":"Turdus merula","imagePath":"resources/images/amsel.png","audioPath":"resources/data/audio/amsel.ogg"},{"id":5,"name":"Blaumeise","latinName":"Cyanistes caerruleus","imagePath":"resources/images/blaumeise.png","audioPath":"resources/data/audio/blaumeise.ogg"},{"id":6,"name":"Elster","latinName":"Pica pica","imagePath":"resources/images/elster.png","audioPath":"resources/data/audio/elster.ogg"},{"id":7,"name":"Grünfink","latinName":"Chloris chloris","imagePath":"resources/images/gruenfink.png","audioPath":"resources/data/audio/gruenfink.ogg"},{"id":8,"name":"Mehlschwalbe","latinName":"Delichon urbicum","imagePath":"resources/images/mehlschwalbe.png","audioPath":"resources/data/audio/mehlschwalbe.ogg"},{"id":9,"name":"Mauersegler","latinName":"Apus apus","imagePath":"resources/images/mauersegler.png","audioPath":"resources/data/audio/mauersegler.ogg"},{"id":10,"name":"Buchfink","latinName":"Fringilla coelebs","imagePath":"resources/images/buchfink.png","audioPath":"resources/data/audio/buchfink.ogg"},{"id":11,"name":"Ringeltaube","latinName":"Columba palumbus","imagePath":"resources/images/ringeltaube.png","audioPath":"resources/data/audio/ringeltaube.ogg"},{"id":12,"name":"Feldsperling","latinName":"Passer montanus","imagePath":"resources/images/feldsperling.png","audioPath":"resources/data/audio/feldsperling.ogg"},{"id":13,"name":"Türkentaube","latinName":"Streptopelia decaocto","imagePath":"resources/images/tuerkentaube.png","audioPath":"resources/data/audio/tuerkentaube.ogg"},{"id":14,"name":"Rauchschwalbe","latinName":"Hirundo rustica","imagePath":"resources/images/rauchschwalbe.png","audioPath":"resources/data/audio/rauchschwalbe.ogg"},{"id":15,"name":"Rotkehlchen","latinName":"Erithacus rubecula","imagePath":"resources/images/rotkehlchen.png","audioPath":"resources/data/audio/rotkehlchen.ogg"}] </script> <ul class="bird-list"></ul> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何使用javascript和HTML模板填充div - How to use javascript and HTML template to fill the div 如何从javaScript中的模板构建html? - How to build html from template in javaScript? 如何将列表 html 中的数据 ID 获取到 django 模板中的 javascript? - How to get data-id in list html to javascript in django template? 将Flask HTML Template中的变量传递给JavaScript文件以供使用 - Pass variable from Flask HTML Template to JavaScript file for use 如何在 Django 模板上传递 Python 列表并在 JavaScript 中使用它? - How do I pass Python list on Django template and use it in JavaScript? 如何在Django模板中将Django列表用作JavaScript变量? - How to use Django list as a javascript variable in Django template? 如何将自定义函数放在javascript对象中以在html模板中使用? - how to put a custom function in a javascript object for use in a html template? 如何在 django html 模板中使用 javascript 字符串作为变量名? - How to use javascript string as variable name in django html template? 如何在JavaScript中使用动态Golang HTML模板ID? - How to use dynamic golang html template id with javascript? 如何使用Freemarker模板在HTML中显示JavaScript数组? - How do I use a Freemarker template to display a JavaScript array in html?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM