jquery - append() 在连接“未完成”标记时显示意外行为
问题描述
所以我有一些来自数据库的数据,我想在多级下拉菜单中显示。这个想法是可以通过它们的类别访问产品,如下所示:Overallmenu -> Manufacturermenu -> Manufacturer -> Products
为此,我使用了几个循环来遍历包含数据的 JSON 解析的多维 JS 对象。循环工作,数据也按所需顺序插入(例如,插入制造商 A 后,插入与制造商 A 相关的所有产品,然后插入制造商 B,等等)。
但是,似乎 append() 给了我一些麻烦。这是到目前为止的循环结构:
function setAllProductsWithCategorisation(id, allProductsByCategorisation){
console.log("inside setAllProductsWithCategorisation",allProductsByCategorisation)
Object.keys(allProductsByCategorisation).forEach((category) => {
//console.log(category)
$('#' + id).append("<li><a href='#'>" + category + "</a><ul class='vertical menu nested'><select>")
allProductsByCategorisation[category].forEach((product) => {
//console.log(product)
$('#' + id).append("<option value=" + product + ">" + product + "</option>")
})
$('#' + id).append("</select></ul></li>")
})
}
现在,在该过程完成后,所有选项都位于它们各自的选择元素之外。使用 Chrome Devtools 检查 DOM 时,我发现选择元素在我的串联中打开后立即关闭。似乎 jquery append() 是“猜测”我只是忘了关闭它,因此自动插入一个右括号 Oo 我的 ul 元素也一样(见截图:https ://imgur.com/ZvxgAJX )
我怎样才能防止这种情况?我基本上只是想通过嵌套循环遍历各个数据来手动构建这个标记,然后逐个添加代码。到目前为止,Append() 非常棒,但这种行为非常可疑......
解决方案
追加将在最后一个内容之后连续追加元素,所以。而不是追加,您可以将它连接到一个变量,然后追加它。
var appendHtm = '';
appendHtm += "<li><a href='#'>" + category + "</a><ul class='vertical menu nested'><select>";
allProductsByCategorisation[category].forEach((product) => {
//console.log(product)
appendHtm += "<option value=" + product + ">" + product + "</option>";
})
appendHtm += "</select></ul></li>";
$('#' + id).append(appendHtm);
推荐阅读
- unix - 通过终端命令触发 Visual Studio 代码启动程序“开始调试”
- javascript - 使用 .reduce 时出现 UnhandledPromiseRejectionWarning
- math - 一般单调函数方程
- elisp - 不区分大小写的文本列表排序
- python - 使用 numpy 的任务
- r - 使用变量指定数据框中的列
- r - html 输出上的 `str_replace_all()`(来自 `huxtable()`)
- javascript - 如何结合两个 animateTransformation 不是同时而是连续?
- r - 在 bind_rows 之后命名数据框中的行
- tensorflow - 什么是火炬的 torch.cat 与 tensorflow 等价?