0

既存のフィールドセットの複製をフォームに追加する必要があるという要件があります。クローン作成プロセスを成功させることができました。しかし、fileset 要素の名前と ID を変更することはできません。これは最初のフィールドセットと同じですが、区別するために別の名前と ID を使用したいと考えています (最後に数字を追加しても問題ありません)。以下は私のjsとフィールドセットです。

<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);
}

また、これは単なるフィールドセットのサンプルであり、同様に異なります。これは正規表現を使用して実行できると聞きましたが、その方法がわかりません。助けてください。

4

2 に答える 2

0

上記の問題に対する(私の仮定によると)最良の答えがここにあります..

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);
    }
}
于 2012-08-14T10:51:24.043 に答える
0

これが正規表現を使用して達成できるかどうかはわかりませんが、次のコードは多少機能するはずです...

var copyNode = original.cloneNode(true);
copyNode.setAttribute("id", modify(original.getAttribute("id")));
document.body.appendChild(el);
于 2012-07-17T12:56:01.200 に答える