javascript - 如何动态创建嵌套元素?
问题描述
我有这个字符串数组var arr = ["ul", "li", "strong", "em", "u"]
。
我怎样才能将这些元素从左到右依次变成 DOM 元素,第一个元素作为根元素。由于某种原因没有使用ID。
也许通过使用循环使其对任意数量的元素都具有灵活性。
var new_element = document.createElement(arr[0]);
我期待这样的事情:
<ul>
<li><strong><em><u>Text Here</u></em></strong></li>
</ul>
谢谢你。
解决方案
您可以这样做reduceRight()
避免需要查询结果以获得最深的值,因为它从最深的元素开始并有效。返回值将是最顶层的元素:
var arr = ["ul", "li", "strong", "em", "u"]
let el = arr.reduceRight((el, n) => {
let d = document.createElement(n)
d.appendChild(el)
return d
}, document.createTextNode("Text Here"))
document.getElementById('container').appendChild(el)
<div id = "container"></div>
它也会以空数组优雅地失败:
var arr = []
let el = arr.reduceRight((el, n) => {
let d = document.createElement(n)
d.appendChild(el)
return d
}, document.createTextNode("Text Here"))
document.getElementById('container').appendChild(el)
<div id = "container"></div>
推荐阅读
- javascript - 使用 useReducer 和 React Context API 时,Reducer 运行两次
- ruby-on-rails - Rails 管理员:如何隐藏活动存储模型?
- azure - Botframework间歇性HTTP状态码GatewayTimeout
- python - 在循环中更新熊猫中的一堆行
- python-3.x - 优雅地将 int64 的 numpy 数组转换为 datetime64 的 numpy 数组
- azure-devops - Azure Pipelines & Nuget Packages - 将包版本设置为标记版本
- android - AutoCompleteTextView 不显示下拉菜单 - Android
- ffmpeg - 我的过滤器似乎以错误的顺序应用
- react-native - React Native Maps:移动 myLocationButton
- c++ - 如何在 C++ 中重载后缀运算符?