使用Javascript循环创建多个HTML元素
我想使用javascript循环来创建多个HTML包装器元素,并将JSON响应API数据插入一些元素(图像、标题、url等) 这是我需要一行一行去做的事情吗使用Javascript循环创建多个HTML元素,javascript,json,api-design,Javascript,Json,Api Design,我想使用javascript循环来创建多个HTML包装器元素,并将JSON响应API数据插入一些元素(图像、标题、url等) 这是我需要一行一行去做的事情吗 <a class="scoreboard-video-outer-link" href=""> <div class="scoreboard-video--wrapper"> <div class="scoreboard-video--thumbnail"> <img src
<a class="scoreboard-video-outer-link" href="">
<div class="scoreboard-video--wrapper">
<div class="scoreboard-video--thumbnail">
<img src="http://via.placeholder.com/350x150">
</div>
<div class="scoreboard-video--info">
<div class="scoreboard-video--title">Pelicans @ Bulls Postgame: E'Twaun Moore 10-8-17</div>
</div>
</div>
</a>
然后我基本上对所有嵌套的HTML元素重复这个过程
- 创建A标签
- 为A标签创建类和href属性
- 将类名和url附加到属性
- 将A标记附加到主包装器
- 创建DIV
- 为DIV创建类属性
- 将DIV追加到新追加的A-tag
如果你能告诉我做我在这里要解释的事情的最佳方法,我将不胜感激?看起来会变得非常混乱。看看这个-[下划线.\u模板] 它非常小,在这种情况下非常有用。 ()
const targetElement=document.querySelector(“#target”)
//定义模板
常量模板=下划线模板(
'');
//定义模板的值
常量对象={
链接:{
类名:'记分板视频外部链接',
url:“#someurl”
},
包装器:{
className:'记分板视频--包装器'
},
缩略图:{
className:'记分板视频--缩略图',
图像:'http://via.placeholder.com/350x150'
},
信息:{
className:'记分板视频--信息',
标题:{
类名:'记分板视频-标题',
文字:“鹈鹕队@公牛队赛后:E`Twaun Moore 10-8-17”
}
}
};
//构建模板,并将innerHTML设置为output元素。
targetElement.innerHTML=模板(obj)
//当然,你可以像这样进入forEach循环
常量arr=[obj,obj,obj];//从对象创建数组
arr.forEach(item=>targetElement.innerHTML+=模板(item))
qq
短版
长版本
你会发现许多解决这个问题的方法。但这可能不是重点。问题是:这是对的吗?你可能会使用错误的工具来解决这个问题
我使用过做类似事情的代码。我没有写,但我必须用它。您会发现这样的代码很快变得非常难以管理。你可能会想:“哦,但我知道它应该做什么。一旦它完成了,我就不会改变它。”
代码分为两类:
- 您停止使用的代码,因此不需要更改
- 您一直在使用的代码,因此需要更改
- 反应
- Vue.js
- 角度2
这是第一步。我想这正是你需要的。从这一点开始,以你的方式及时构建完整的框架。以下是我的答案。上面有记号。为了查看代码片段中的效果,您必须进入开发人员控制台检查包装器元素或查看开发人员控制台日志 我们基本上创建了一些助手方法来轻松地创建元素并将它们附加到DOM中——这并不像看上去那么难。这也让您可以轻松地将JSON检索到的对象作为属性附加到元素中 这里有一个基本的版本,让你知道发生了什么以及如何使用它
//create element function
function create(tagName, props) {
return Object.assign(document.createElement(tagName), (props || {}));
}
//append child function
function ac(p, c) {
if (c) p.appendChild(c);
return p;
}
//example:
//get wrapper div
let mainWrapper = document.getElementById("mainWrapper");
//create link and div
let link = create("a", { href:"google.com" });
let div = create("div", { id: "myDiv" });
//add link as a child to div, add the result to mainWrapper
ac(mainWrapper, ac(div, link));
//创建元素函数
函数创建(标记名、道具){
返回Object.assign(document.createElement(标记名),(props |{});
}
//附加子函数
功能ac(p,c){
如(c)p.c;
返回p;
}
//例如:
//获取包装器div
让mainWrapper=document.getElementById(“mainWrapper”);
//创建链接和div
let link=create(“a”,{href:“google.com”,textContent:“此文本是div中的链接”});
让div=create(“div”,{id:“myDiv”,textContent:“此文本在div中!”});
//将链接作为子项添加到div,将结果添加到mainWrapper
ac(主包装,ac(分区,链接))代码>
div{
边框:3倍纯黑;
填充物:5px;
}
到目前为止,您尝试了哪些内容?您对上述内容中的哪一部分有问题?我正在进行上述工作。例如:var link=document.createElement('a');document.getElementsByTagName(“a”)[0].setAttribute(“类”,“记分板视频外部链接”);document.getElementsByTagName(“a”)[0].setAttribute(“url”,”);mainWrapper.appendChild(链接);然后我基本上对所有嵌套的HTML元素重复这个过程。像这样模板化HTML是一个非常常见的问题。非常常见,事实上,有很多JavaScript框架可以做到这一点。我建议您研究React、Vue或Angular之类的框架。谢谢Sidney。我将进一步研究这些框架。我以前使用Vue创建但我不会创建这样的循环。这最终会出现在Drupal页面上,所以我也必须更深入地探讨这段婚姻。@4ndy请编辑/更新您的问题,并包括您尝试过的内容。谢谢。回答得很好。谢谢。我意识到我可能应该使用
//create element function
function create(tagName, props) {
return Object.assign(document.createElement(tagName), (props || {}));
}
//append child function
function ac(p, c) {
if (c) p.appendChild(c);
return p;
}
//example:
//get wrapper div
let mainWrapper = document.getElementById("mainWrapper");
//create link and div
let link = create("a", { href:"google.com" });
let div = create("div", { id: "myDiv" });
//add link as a child to div, add the result to mainWrapper
ac(mainWrapper, ac(div, link));