我有这个HTML代码
<div class="render-form-editlayout-10">
<div class="formeo-render formeo" id="formeo-rendered-1">
<div class="f-stage" id="afd81782-0230-4bbf-a39d-774ba6b3f6cf">
<div class="f-row" id="78501c81-ce36-4703-ae99-7e086a95c0d7">
<div class="f-render-column" id="71dac9e6-03ed-4294-b60f-8d2466d1aa17" style="width: 100%;">
<h1 id="5baec553-c31c-4d0b-a138-6d338deb1f4b">Contact</h1></div>
</div>
<div class="f-row" id="44a64baa-64e5-44ad-af51-bed0a0abf3ae">
<div class="f-render-column" id="95128be9-b2cb-4c82-aea2-4dd84b247ac4" style="width: 50%;">
<div class="f-field-group">
<label for="293053b9-9769-4b06-8156-01d7a15995b3">First name</label>
<input type="text" name="contact_first_name" id="293053b9-9769-4b06-8156-01d7a15995b3">
</div>
</div>
<div class="f-render-column" id="17193931-bd81-452e-95ba-591f2246eb37" style="width: 50%;">
<div class="f-field-group">
<label for="3d276a4f-1dff-4594-8fe8-56ac1acf58e4">Sur Name</label>
<input type="text" name="contact_sur_name" id="3d276a4f-1dff-4594-8fe8-56ac1acf58e4">
</div>
</div>
</div>
<div class="f-row" id="9ba99767-5ea4-40b2-b0a4-df252b210a3c">
<div class="f-render-column f-render-column f-render-column" id="4fe9abe0-6944-4504-896b-44adfa58ade8" style="width: 100%;">
<div class="f-field-group">
<label for="8379e16f-f468-47c4-8149-ba606d4310ad">Email</label>
<input type="text" name="contact_email" id="8379e16f-f468-47c4-8149-ba606d4310ad">
</div>
</div>
</div>
<div class="f-row" id="e5bd3083-fb17-4453-a875-b6024db9461f">
<div class="f-render-column f-render-column f-render-column" id="b87b0913-9286-4233-afcb-e568e3017092" style="width: 100%;">
<div class="f-field-group">
<label for="a54606a2-679b-4e9c-8b90-f5f2c6e79ef0">Phone</label>
<input type="number" class="form-control" name="contact_phone" id="a54606a2-679b-4e9c-8b90-f5f2c6e79ef0">
</div>
</div>
</div>
</div>
</div>
</div>
<div class="render-form-editlayout-10">
<div class="formeo-render formeo" id="formeo-rendered-1">
<div class="f-stage" id="afd81782-0230-4bbf-a39d-774ba6b3f6cf">
<div class="f-row" id="44a64baa-64e5-44ad-af51-bed0a0abf3ae">
<div class="f-render-column" id="95128be9-b2cb-4c82-aea2-4dd84b247ac4" style="width: 50%;">
<div class="f-field-group">
<label for="293053b9-9769-4b06-8156-01d7a15995b3">First name</label>
<input type="text" name="contact_first_name" id="293053b9-9769-4b06-8156-01d7a15995b3">
</div>
</div>
<div class="f-render-column" id="17193931-bd81-452e-95ba-591f2246eb37" style="width: 50%;">
<div class="f-field-group">
<label for="3d276a4f-1dff-4594-8fe8-56ac1acf58e4">Sur Name</label>
<input type="text" name="contact_sur_name" id="3d276a4f-1dff-4594-8fe8-56ac1acf58e4">
</div>
</div>
</div>
<div class="f-row" id="9ba99767-5ea4-40b2-b0a4-df252b210a3c">
<div class="f-render-column f-render-column f-render-column" id="4fe9abe0-6944-4504-896b-44adfa58ade8" style="width: 100%;">
<div class="f-field-group">
<label for="8379e16f-f468-47c4-8149-ba606d4310ad">Email</label>
<input type="text" name="contact_email" id="8379e16f-f468-47c4-8149-ba606d4310ad">
</div>
</div>
</div>
<div class="f-row" id="e5bd3083-fb17-4453-a875-b6024db9461f">
<div class="f-render-column f-render-column f-render-column" id="b87b0913-9286-4233-afcb-e568e3017092" style="width: 100%;">
<div class="f-field-group">
<label for="a54606a2-679b-4e9c-8b90-f5f2c6e79ef0">Phone</label>
<input type="number" class="form-control" name="contact_phone" id="a54606a2-679b-4e9c-8b90-f5f2c6e79ef0">
</div>
</div>
</div>
</div>
</div>
</div>
<button class="btn btn-success cloneMe " data-id="10">+</button>
Js Fiddle对于上面的代码
因此,当您单击 + 按钮时,它应该克隆 html。
现在当它被克隆时我想让它看起来像这样
要注意的是输入类型的名称应该是递增的,例如 name_1 和 name_2
我真的很困惑该怎么做
更新
正如下面的一个答案中提到的,可以使用按钮的 data-id
访问 div 的 Id。那么我的问题是?是否可以只获取输入类型并在那里更改名称+数据 ID 并追加?
最佳答案
这是对模板文字的公然滥用,但这里有一个简化版本只是为了好玩——作为一般做法,我会倾向于使用实际的模板库来处理这类事情(Underscore 有一个相当简单的模板函数,例如).
addSubform = (function(){
n = 0
container = $('#container')
return function(){
n += 1
container.append(`<div class="subform" id="subform${n}">
First Name: <input type="text" id="fname_${n}" name="fname_${n}" /><br />
Surname: <input type="text" id="sname_${n}" name="sname_${n}" /><br />
<hr />
</div>`)
}
})()
$(document).ready(function(){
addSubform()
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="container">
</div>
<button onclick="addSubform()">+</button>
这是另一个选项,如果您有任何可行的替代方案,我通常不会推荐它,但它使用正则表达式来查找名称属性并附加后缀。它并没有像预期的那样工作,但我认为它足以说明这个概念。如果您使用开发工具进行检查,您会看到名称属性正在递增。
为了管理范围,我在两个示例中都使用了闭包。这是个人喜好,对于解决您的特定问题并不重要。
//I would probably not put this in a global,
//but since it's unclear it's being determined client-side,
//I'm considering that concern out of scope for this question.
//var formNum
buildForm = function(formNum) {
/*A lot going on in this line - call the Array's slice method
against the HTML element collection matching the class name "f-row",
supplying an index (zero-based) of 1 for the start. This effectively
removes the first element. Then use .reduce to convert the HTML of
the remaining elements to a string.
*/
var base = Array.prototype.slice.call(
document.getElementsByClassName('render-form-editlayout-' + formNum)[0].getElementsByClassName('f-row'), 1)
.reduce(function(b,e){return b += e.outerHTML},"")
var suffix = 0
return function() {
suffix += 1
return base.replace(/name="([a-z_]+)"/gm,'name="$1_' + suffix + '"')
}
}
addForm = function(formNum, builder){
var container = document.getElementsByClassName('render-form-editlayout-' + formNum)[0].getElementsByClassName('f-stage')[0]
return function() {
container.innerHTML += builder()
}
}
makeCloneEvent = function(num) {
return addForm(num, buildForm(num))
}
$('.cloneMe').each(
function() {
el = $(this)
el.on('click', makeCloneEvent(el.data('id')))
}
)
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="form_container">
<div class="render-form-editlayout-10 form-model">
<div class="formeo-render formeo" id="formeo-rendered-1">
<div class="f-stage" id="afd81782-0230-4bbf-a39d-774ba6b3f6cf">
<div class="f-row" id="78501c81-ce36-4703-ae99-7e086a95c0d7">
<div class="f-render-column" id="71dac9e6-03ed-4294-b60f-8d2466d1aa17" style="width: 100%;">
<h1 id="5baec553-c31c-4d0b-a138-6d338deb1f4b">Contact</h1></div>
</div>
<div class="f-row" id="44a64baa-64e5-44ad-af51-bed0a0abf3ae">
<div class="f-render-column" id="95128be9-b2cb-4c82-aea2-4dd84b247ac4" style="width: 50%;">
<div class="f-field-group">
<label for="293053b9-9769-4b06-8156-01d7a15995b3">First name</label>
<input type="text" name="contact_first_name" id="293053b9-9769-4b06-8156-01d7a15995b3">
</div>
</div>
<div class="f-render-column" id="17193931-bd81-452e-95ba-591f2246eb37" style="width: 50%;">
<div class="f-field-group">
<label for="3d276a4f-1dff-4594-8fe8-56ac1acf58e4">Sur Name</label>
<input type="text" name="contact_sur_name" id="3d276a4f-1dff-4594-8fe8-56ac1acf58e4">
</div>
</div>
</div>
<div class="f-row" id="9ba99767-5ea4-40b2-b0a4-df252b210a3c">
<div class="f-render-column f-render-column f-render-column" id="4fe9abe0-6944-4504-896b-44adfa58ade8" style="width: 100%;">
<div class="f-field-group">
<label for="8379e16f-f468-47c4-8149-ba606d4310ad">Email</label>
<input type="text" name="contact_email" id="8379e16f-f468-47c4-8149-ba606d4310ad">
</div>
</div>
</div>
<div class="f-row" id="e5bd3083-fb17-4453-a875-b6024db9461f">
<div class="f-render-column f-render-column f-render-column" id="b87b0913-9286-4233-afcb-e568e3017092" style="width: 100%;">
<div class="f-field-group">
<label for="a54606a2-679b-4e9c-8b90-f5f2c6e79ef0">Phone</label>
<input type="number" class="form-control" name="contact_phone" id="a54606a2-679b-4e9c-8b90-f5f2c6e79ef0">
</div>
</div>
</div>
</div>
</div>
<button class="cloneMe" data-id='10'>Add +</button>
关于javascript - Javascript 中的 HTML 克隆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45962870/