使用javascript克隆时更改filedset元素的名称
我有一个要求,我必须在表单中添加现有字段集的副本。我能够成功地完成克隆过程。但是我无法更改filedset元素的名称和id。它与第一个字段集相同,但我希望它具有不同的名称和id来区分它(即使在末尾添加一个数字也可以)。下面是我的js和fieldset使用javascript克隆时更改filedset元素的名称,javascript,fieldset,Javascript,Fieldset,我有一个要求,我必须在表单中添加现有字段集的副本。我能够成功地完成克隆过程。但是我无法更改filedset元素的名称和id。它与第一个字段集相同,但我希望它具有不同的名称和id来区分它(即使在末尾添加一个数字也可以)。下面是我的js和fieldset <div id="placeholder"> <div id="template"> <fieldset id="fieldset"> <legend id="legend">Professional
<div id="placeholder">
<div id="template">
<fieldset id="fieldset">
<legend id="legend">Professional development</legend>
<p>Item <input type ="text" size="25" name="prof_itemDYNID" id ="prof_item_id"/><br /></p>
<p>Duration <input type ="text" size="25" name="prof_durationDYNID" id="prof_duration_id" /><br /></p>
<p>Enlargement <label for="enlargement"></label><p></p>
<textarea name="textareaDYNID" cols="71" rows="5" id="prof_enlargement">
</textarea></p>
<p><input type="button" value="Add new item" id="add_prof" onclick="Add();" /></p>
</fieldset>
</div>
</div>
function Add() {
var oClone = document.getElementById("template").cloneNode(true);
document.getElementById("placeholder").appendChild(oClone);
}
专业发展
项目
持续时间
放大
函数Add(){
var oClone=document.getElementById(“模板”).cloneNode(true);
document.getElementById(“占位符”).appendChild(oClone);
}
此外,这只是一个示例字段集,它也会有所不同。我听说这可以用正则表达式实现,但不知道如何实现。请提供帮助。不确定使用正则表达式是否可以实现这一点,但下面的代码应该可以正常工作
var copyNode = original.cloneNode(true);
copyNode.setAttribute("id", modify(original.getAttribute("id")));
document.body.appendChild(el);
下面是(根据我的假设)对上述问题的最佳答案
function addMe(a){
var original = a.parentNode;
while (original.nodeName.toLowerCase() != 'fieldset')
{
original = original.parentNode;
}
var duplicate = original.cloneNode(true);
var changeID= duplicate.id;
var counter = parseInt(changeID.charAt(changeID.length-1));
++counter;
var afterchangeID = changeID.substring(0,changeID.length-1);
var newID=afterchangeID + counter;
duplicate.id = newID;
var tagNames = ['label', 'input', 'select', 'textarea'];
for (var i in tagNames)
{
var nameChange = duplicate.getElementsByTagName(tagNames[i]);
for (var j = 0; j < nameChange.length; j++)
{if (nameChange[j].type != 'hidden'){
var elementName = nameChange[j].name;
var afterSplitName = elementName.substring(0,elementName.length-1);
nameChange[j].name = afterSplitName + counter;
var elementId = nameChange[j].id;
var afterSplitId = elementId.substring(0,elementId.length-1);
nameChange[j].id = afterSplitId + counter;
}
}
}
insertAfter(duplicate, original);
}
function insertAfter(newElement, targetElement)
{
var parent = targetElement.parentNode;
if (parent.lastChild == targetElement)
{
parent.appendChild(newElement);
}
else
{
parent.insertBefore(newElement, targetElement.nextSibling);
}
}
函数地址(a){
var original=a.parentNode;
while(original.nodeName.toLowerCase()!='fieldset')
{
original=original.parentNode;
}
var duplicate=original.cloneNode(真);
var changeID=duplicate.id;
变量计数器=parseInt(changeID.charAt(changeID.length-1));
++计数器;
var afterchangeID=changeID.substring(0,changeID.length-1);
var newID=afterchangeID+计数器;
replicate.id=newID;
变量标记名=['label','input','select','textarea'];
for(标记名中的变量i)
{
var nameChange=duplicate.getElementsByTagName(标记名[i]);
对于(var j=0;j
Hi..谢谢您的回复。这只是更改DIV元素(模板)的id,而不是字段集中的文本字段或文本区域。