【发布时间】:2019-01-22 22:00:42
【问题描述】:
我想使用 javascript 从存储的对象创建 HTML。它们包括带有 onclick 函数的按钮,这些按钮调用对象内部的函数。
我尝试使用 document.createElement("Div") 创建每个节点并设置其内容/类...但发现此解决方案非常笨拙。
目前我正在将节点的 innerHTML 设置为我创建的字符串,这样更具可读性。
let objHTML = document.createElement("Div");
objHTML.innerHTML =
`<div class="ObjWrap ${status}">
<p class="objName">${name}</p>
<p class="objContent">${content}</p>
<button class="objEdit" onclick="${edit(evt)}">e</button>
<button class="objActive" onclick="${activity(evt)}">x</button>
</div>`;
编辑和活动功能是对象的本地和访问变量,所以我不能写“onclick =“编辑(evt)”... - 但我的解决方案也不起作用,我猜编辑和活动功能只是评估并放入 html。我可以使用事件侦听器而不是按钮上的 onclick 事件,但这又不那么可读,我还必须再次访问按钮以附加事件侦听器(在这种情况下类似于 objHTML .getElementsByTagName('div')[0].getElementsByTagName('div')[0].getElementsByTagName('button')[0/1])。
我的问题是如何创建我的 HTML,同时保持它的可读性,并允许我添加将变量引用到按钮/任何元素的 onclick 函数。我不能使用 Id,因为这些元素被多次创建。
编辑:Codepen 显示我的意思,断章取义,所以有些事情可能没有意义:https://codepen.io/anon/pen/jdEqwQ
【问题讨论】:
-
您正在寻找 React 或 Angular。
-
我或多或少刚开始使用 javascript,希望在学习新框架之前能够做所有的事情,但很高兴知道 React 和 Angular 的用途
-
你应该考虑使用 Vue 之类的框架。这个想法是将业务和演示之间的关注点分开。
-
你能在你的问题中添加一个“存储对象”的例子吗?
-
是的,一定要学习原生 JavaScript!但是,当您感到自信时(看起来确实如此,因为您基本上是在想象其中一个库),也请花点时间学习它们!当然不是每个站点都需要使用这些库,但是对于类似应用程序的站点,如果您不想发疯,它们基本上是必须的。
标签: javascript html