【问题标题】:use JQuery to add an id for a div to make a dynamic table with JSON and JQuery使用 JQuery 为 div 添加 id 以使用 JSON 和 JQuery 制作动态表
【发布时间】:2017-11-23 08:17:41
【问题描述】:

我正在尝试使用 Ajax 从 URL 获取 JSON 数据以制作动态联系人表,并在用户单击表上的姓名时使用引导模式显示带有特定联系人信息的卡片。我让每个联系人模态都有自己的模态块,并希望使用不同的 id 来识别和填充每个模态 div 的正确数据,但是当我想将 id 属性添加到特定 div 时,我发现 id 没有t 用下面的代码添加。找不到问题出在哪里,特来求救。

 var modal_elements = $(modalTemplate); 
                    var contactModalid = "myModal" + i.toString();
                    modal_elements.find("#myModal0").attr("id", contactModalid);
                    modal_elements.find("#name").text(contact.name);
                    modalContainer.append(modal_elements);

以下是我在 HTML 头中的整个脚本块,以便更好地了解我的整个情况。

$(document).ready(function () {

        var contactTemplate =
            "<tr><td class=\"contactID\">contact's id goes here</td>" +
            "<td><a data-toggle=\"modal\" class=\"contactName\">contact's name goes here</a></td></tr>";

        var modalTemplate = 
        "<div class=\"modal fade\" id=\"myModal0\" role=\"dialog\">" + 
        "<div class=\"modal-dialog\">" + 
        "<div class=\"modal-content\">" + 
        "<div class=\"modal-body\" style=\"padding:80px 50px; background-color:DodgerBlue; color: white\">" +
        "<h2 id=\"name\" style=\"text-align: right\"></h2>" + 
        "<p id=\"title\" style=\"text-align: right\">Web Designer</p></div>" + 
        "<div class=\"modal-footer\" style=\"background-color:black; color: white\">" + 
        "<p id=\"phone_email\">222.222.2222 | info@business.com</p><p id=\"address\">1812 Rafe Lane, Jackson, MS 39211</p></div></div></div></div>";

        $.ajax({
            url: 'http://jsonplaceholder.typicode.com/users',
            type: 'GET',
            success: function (msg) {
                var container = $("tbody");
                var modalContainer = $("#cardModal");

                for (var i = 0; i < msg.length; i++) {
                    var contact = msg[i];

                    var contact_elements = $(contactTemplate);
                    contact_elements.find(".contactID").text(contact.id);
                    contact_elements.find(".contactName").text(contact.name);
                    contact_elements.find("a").attr("id", i.toString());
                    var herfValue = "#myModal" + i.toString();
                    contact_elements.find("a").attr("href", herfValue);
                    container.append(contact_elements);


                    var modal_elements = $(modalTemplate); 
                    var contactModalid = "myModal" + i.toString();
                    modal_elements.find("#myModal0").attr("id", contactModalid);
                    modal_elements.find("#name").text(contact.name);
                    modalContainer.append(modal_elements);


                };
            }

        });
    });

【问题讨论】:

  • modal_elements.find("#myModal0") 没有意义,因为$("#myModal0") 就足够了。 # 表示您选择了一个 id。如果它是一个类,你可以做modal_elements.find(".myModal0")
  • 在我们使用append() 到目标&lt;div&gt; 之前,所有的HTML 元素仍然在modal_elements 中,所以我必须使用find()modal_elements 来定位id,你可以不要只使用$("#myModal0")

标签: javascript jquery ajax html bootstrap-modal


【解决方案1】:

只需将其更改为

modal_elements.attr("id", contactModalid);

会解决的。

模板中称为#myModal0 的元素是modal_elements 表示的元素,因为它是模板中元素的根元素。使用“查找”搜索元素的 children,但您想修改元素本身。

【讨论】:

  • 谢谢,它有效。但是,你能解释一下原因吗? modal_elements 中有几个 id 属性,但您的解决方案只更改了第一个 div 标记中的 id。
  • 另外,你能解释一下为什么我的代码不能更详细地工作吗?如果您查看我的代码,我使用contact_elements.find("a").attr("id", i.toString());contact_elements.find("a").attr("href", herfValue);find() attr 并在之后设置值,但为什么modal_elements.find("#myModal0").attr("id", contactModalid); 不行?谢谢
  • 因为contact_elements 的根元素是&lt;tr&gt; - 基本上模板字符串中的第一个元素将是对象实际表示的元素。你的 jQuery 对象不是一个数组,把它想象成一个树形结构,你的字符串中的第一个元素成为对象,而其他元素可以使用“.find()”作为它的子元素找到。在contact_elements 中&lt;a&gt;&lt;tr&gt; 的子元素,但在modal_elements 中#myModal0 是加载的第一个元素,因此您创建的jQuery 对象 元素#myModal0。这有意义吗?
  • 我的命令不会修改模板中的其他 ID,因为它们是“myModal0”元素的 children,而在元素本身上运行 .attr() 只会修改那个元素,而不是它的子元素。
  • P.S.如果它可以帮助您解决问题,请不要忘记接受和/或投票 - 谢谢:-)
【解决方案2】:

正如@ADyson所说,当你找到元素时,它会在被选元素中找到子元素,所以你的脚本应该包含

modal_elements.attr("id", contactModalid);

或 选择它的前一个对象

modal_elements.find("#myModal0").prevObject[0].id = contactModalid;

两个都可以!!

【讨论】:

  • 感谢分享另一种方式来解释我错在哪里。真的很有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多