I持って(フォームが複数回表示されますjqueryの携帯電話に設計されており、htmlページ、クローン化された)この方法でクローン化された形式(commonStuff):クローンフォーム(javascript)ですべてのIDの名前を変更する方法は?
var commonClone = commonStuff.cloneNode(true);
と、この機能
function renameNodes(node) {
var i;
if (node.length) {
for (i = 0; i < node.length; i += 1) {
renameNodes(node[i]);
}
} else {
// rename any form-related elements
if (typeof node.form !== 'undefined') {
node.id = currentPrefix + '_' + node.id;
node.name = currentPrefix + '_' + node.name;
// This assumes that form elements do not have child form elements!
} else if (node.children) {
renameNodes(node.children);
}
}
}
これはformの任意の要素のidと名前に接頭辞 'form1_'、 'form_2'(currentPrefix)を追加し、commonCloneに適用されます(そしてその子に再帰的に適用されます)。
renameNodes(commonClone);
それは
<div data-role="fieldcontain" class="ui-field-contain ui-body ui-br">
<label for="foo" class="ui-input-text">Age:</label>
<input type="text" name="age" id="age" value="" class="ui-input-text ui-body-c ui-corner-all ui-shadow-inset">
</div>
のようなテキスト入力の場合には完全に動作しますが、それはfieldcontain 'と'のような外側のdiv要素に名前変更を適用する
<div data-role="fieldcontain">
<fieldset data-role="controlgroup" data-type="horizontal">
<legend>Address:</legend>
<input type="radio" name="radio-address" id="radio-address_female" value="1" checked="checked" />
<label for="radio-address_female">Address 1</label>
<input type="radio" name="radio-address" id="radio-address_male" value="2" />
<label for="radio-address_male">Address 2</label>
</fieldset>
</div>
のようにラジオボタンで失敗します対照群'。それらの2つのdivを削除すると機能しますが、グラフィック効果は受け入れられません...
これまでのところ、私は問題は最後の 'else if'ブロックで兄弟を気にしませんが、私はこれを修正する方法は本当に分かりません。何か案が?
編集:このコードは本当に、これははるかにエレガントからである。この答えHow to create a tabbed html form with a common div
はありがとうございます。これは私が最終的に制作したコードと似ています(自分の答えを見てください)。私は、ページ内の要素の名前を直接変更するのではなく、複製されたノード上で再帰的メソッドを使用してこのことを管理するよりエレガントな方法を見つけることを望んでいた。 –
Allright、answer edited。 –
うわー、これは面白いです!ありがとうございました! –