【问题标题】:Dynamically adding elements with jquery error动态添加带有jquery错误的元素
【发布时间】:2018-01-11 06:22:02
【问题描述】:

这是我的小提琴:DEMO

根据数据 JSON,有 2 个“组”。 每个组都有 2 个“小部件”。 每个小部件都有特定的“控件”

飞利浦小部件可提供亮度/亮度/颜色控件。它们分别与开关/滑块/颜色选择器相关联。

  for (var k = 0; k < data.groups[i].widgets[j].controls.length; k++) {

    $("." + data.groups[i].name + " > .widgets-container > ." + data.groups[i].widgets[j].name + " > .widget-header > .widget-label > .row > .brandName").text(data.groups[i].widgets[j].brandName);

    $("." + data.groups[i].name + " > .widgets-container > ." + data.groups[i].widgets[j].name + " > .widget-header > .widget-label > .row > .productName").text(data.groups[i].widgets[j].productName);

    var controlDiv;
    if (data.groups[i].widgets[j].controls[k].type === "SWITCH") {
      controlDiv = lightControl();
    } else if (data.groups[i].widgets[j].controls[k].type === "SLIDER") {
      controlDiv = brightnessControl();
    } else if (data.groups[i].widgets[j].controls[k].type === "PICKER") {
      controlDiv = colorControl();
    }

    controlDiv = $(controlDiv).addClass(data.groups[i].widgets[j].controls[k].name);

    $("." + data.groups[i].widgets[j].controls[k].name > ".control-name").text(data.groups[i].widgets[j].controls[k].name);

    $("." + data.groups[i].name + " > .widgets-container").append(widgetDiv);
    $(widgetDiv).append(controlDiv);
    $(".container-box").append(groupDiv);
  }

但是,没有按照 JSON 的要求附加元素。此外,不会出现亮度/亮度/颜色控制的标签。我哪里错了?

任何帮助将不胜感激。 谢谢

【问题讨论】:

  • 您正在添加一些具有控制名称的类,例如 Light Control。如果您要访问某个地方,那么它可能会产生问题。所以请确保你有像 light-control 这样的类语法
  • 向我们提供您想要的输出HTML 就像屏幕截图一样。
  • @gitesh :我会纠正这个问题。谢谢你。循环问题有什么运气吗?
  • @JaydeepMor:请检查问题。附上截图:)
  • 不截图想要HTML.

标签: javascript jquery css json


【解决方案1】:

这里是答案小提琴:AnswerFiddle

我通过首先创建 DOM 元素然后为 DOM 元素分配/附加值来解决此问题。

之前有一个问题,因为有时甚至在创建 DOM 元素之前就会尝试分配值。

    controlDiv = $(controlDiv).addClass("row " + (data.groups[i].widgets[j].controls[k].name).replace(/\s+/g, '-').toLowerCase()).prepend("<div class='col s7 controlName'>" + data.groups[i].widgets[j].controls[k].name + "</div>");

    if (data.groups[i].widgets[j].controls[k].type === 'SWITCH') {
      $(controlDiv).append('<div class="col s5 switch"><label>OFF<input type= "checkbox"><span class="lever"></span>ON</label></div>')
    } else if (data.groups[i].widgets[j].controls[k].type === 'SLIDER') {
      $(controlDiv).append('<div class="col s5 center-align"><img src="images/brightness.png"></div><p class="col s7 range-field"><input type="range" min = "0" max = "100"/></p><div class="col s5 brightness-percentage center-align">60%</div>')
    } else if (data.groups[i].widgets[j].controls[k].type === 'PICKER') {
      $(controlDiv).append('<input class="col s2" type="color" name="favcolor" value="#ff0000"><div class="col s3 colorHexValue center-align">#ff0000</div>')

    } else if (data.groups[i].widgets[j].controls[k].type === 'GRAPH') {
      $(controlDiv).html("<img src='images/graph.png'>");
    } else if (data.groups[i].widgets[j].controls[k].type === 'DETECTOR') {
      $(controlDiv).html("<img src='images/motion.png'>")
    }


    widgetDiv.append(controlDiv);
    groupDiv.append(widgetDiv);
    $(".container-box").append(groupDiv);

【讨论】:

  • 我认为您的问题出在以下几行:$("." + data.groups[i].name + " > .widgets-container > ." + data.groups[i].widgets [j].name + " > .widget-header > .widget-label > .row > .brandName").text(data.groups[i].widgets[j].brandName);
  • 在将元素附加到 dom 之前尝试获取元素的位置
猜你喜欢
  • 2016-01-29
  • 1970-01-01
  • 2011-11-01
  • 2011-01-15
  • 2011-07-24
  • 1970-01-01
  • 2013-11-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多