动态加载Div元素并分配ID

时间:2013-05-08 20:11:52

标签: javascript html dom dynamically-generated

我了解如何动态加载HTML,我无法理解如何加载它,分配和跟踪加载的div内元素的ID。

这是我的主要栏目

<div id="add-equip-container">
    <div id="add-equip-content">
    </div>
    <button id="add-equipment">Add More Equipment</button>
    <button id="submit-equipment">Submit Equipment</button>
</div>

现在,每次点击add-equipment时,我都想将以下块加载到add-equip-content

<div class="add-equip-form">
    <input id="?" type="text" placeholder="Equipment Description..."/></br>
    <input id="?" type="text" placeholder="Equipment Number"/></br>
    <input id="?" type="text" placeholder="Other Stuff..."/></br>
</div>

每个块都将插入前一个加载的下方。我不知道如何分配和跟踪将在此操作期间抛出的各种ID。我想要一个不涉及jQuery的解决方案。在进入框架之前,我正试图利用vanilla JavaScript。

我确信可能存在问题或博客或其他内容,但我不知道要搜索的最佳关键字。每当我在搜索关键字中使用“动态加载HTML”时,我得到的就是AJAX Tutorial结果。

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

一个解决方案实际上并不是加载HTML,而是通过Javascript创建它。这对您的情况很有用,因为您要向页面添加相同的代码,只有不同的ID。我会写一个这样的函数:

 var form_index = 0;

 //elem is the element you are appending to.
 function addForm(elem) {

    //create the container
    var form_container = document.createElement("div");
    form_container.className = "add-equip-form";        

    //description input
    var desc = document.createElement('input');
    desc.id = "equip-desc-" + form_index;
    desc.type = "text";
    desc.placeholder = "Equipment Description...";

    //Equipment number input
    var num = document.createElement('input');
    num.id = "equip-num-" + form_index;
    num.type = "text";
    num.placeholder = "Equipment Number";

    //Other
    var other = document.createElement('input');
    other.id = "equip-other-" + form_index;
    other.type = "text";
    desc.placeholder = "Other Stuff...";

    //append inputs
    form_container.appendChild(desc);
    form_container.appendChild(num);
    form_container.appendChild(other);

    //append form
    elem.appendChild(form_container);

    form_index++;

  }

然后,要访问您创建的ID,您需要知道的是您的父元素中包含div的索引。有关JavaScript解决方案,请参阅here。获得索引后,获取表单数据就像使用索引根据ID进行查询一样简单。

答案 1 :(得分:1)

这应该这样做。如果您不需要在数组中引用这些元素,则可能需要也可能不需要执行elements.push(content)。可以改为迭代一个计数器。

var add_equip_content = document.getElementById('add-equip-content'),
        add_equip_btn = document.getElementById('add-equipment'),
        elements = [];

add_equip_btn.addEventListener('click', addEquipment, true);

function addEquipment(event){
    var content = document.createElement('div'),
        html = '';

    content.className = 'add-equip-form';
    html += '<input id="equip_' + elements.length + '" type="text" placeholder="Equipment Description..."/></br>';
    html += '<input id="equip_' + elements.length + '" type="text" placeholder="Equipment Number"/></br>';
    html += '<input id="equip_' + elements.length + '" type="text" placeholder="Other Stuff..."/></br>';

    content.innerHTML = html;

    add_equip_content.appendChild(content);

    elements.push(content);
}