如何在克隆模板时更改内部div?

问题描述:

我有一个模板,我克隆制作单页应用程序。这里面的模板是一些div的应该有一个唯一的ID,这样当我打开多个应用程序(克隆多个div)如何在克隆模板时更改内部div?

<template id="templ"> 
<div id="name"></div> 
<div id="btn"> 
    <fieldset id="fld"> 
    <input type="text" id="userMessage"placeholder="Type your message…" autofocus> 
    <input type="hidden"> 
    <button id="send" >Save</button> 
    </fieldset> 
</div> 
</template> 

应当独立工作,我克隆它像这样

var i =0 
let template = document.querySelector('#templ') 
let clone = document.importNode(template.content, true) 
clone.id = 'name' + ++i // I can't change the Id o this name div 
document.querySelector('body').appendChild(clone) 

谢谢

+0

放'++之间i' **()** –

+0

它的工作原理,因为空间,而不是一个解决方案 – Harman

clone.id是未定义的,因为克隆是一个#document-fragment有两个孩子。

您需要查询的“名”的孩子,并改变其ID,例如像这样:

const template = document.querySelector('#templ') 
const body = document.querySelector('body') 

function appendClone(index){ 
    let clone = document.importNode(template.content, true) 
    clone.getElementById('name').id = 'name' + index 
    // all other elements with IDs 
    body.appendChild(clone) 
} 

然后你可以遍历克隆的量和简单的调用函数与循环索引:

let clones = 5 
for (let i = 0; i < clones; i++){ 
    appendClone(i) 
} 
+0

,如果我说的有5个克隆这是行不通的,而不把它放在括号中。所有'名字'的孩子都会有相同的ID – Jason

+0

那么你当然必须迭代克隆,但我的答案保持有效。我可以在家后立即添加示例函数。另外,请记住,你将不得不改变每一个ID。 – Barthy

将动态HTML数据存储在脚本元素中,并在需要时用动态数据重新添加。

HTML数据:

<script id="hidden-template" type="text/x-custom-template"> 
    <div id='${dynamicid}'> 
     <p>${dynamic_data}</p> 
    </div> 
</script> 

脚本更换和添加​​。

var template_add = $('#hidden-template').text(); 
var items = [{ 
    dynamicid: '1', 
    dynamic_data: '0' 
    }]; 

function replaceDynamicData(props) { 
    return function(tok, i) { 
     return (i % 2) ? props[tok] : tok; 
    }; 
} 
var dynamic_HTML = template_add.split(/\$\{(.+?)\}/g); 
$('tbody').append(items.map(function(item) { 
    return dynamic_HTML.map(replaceDynamicData(item)).join(''); 
})); 
+0

我想用香草JS做到这一点,谢谢 – Jason