- 締切済み
テーブルセル内のinput要素のnameを変更
お世話になります。 「 var cloneTable = this.DataTable.cloneNode(true); 」 JavaScriptにて上記のようなコードでテーブルをコピーする必要があるのですが、 コピーするテーブル(DataTable)のセル内にはテキストボックスやプルダウンが入っています。 ただ単にコピーしてしまうと同一のnameやidのinput要素が出来てしまいます。 これを避けたいので、コピーしたテーブル「cloneTable」のname,id属性を別のものに変更し(何でもいい) 同一の名前になることをなんとか回避しようと考えたのですが、なかなかうまくいきません。。 そのようなことは可能なのでしょうか。 お手数ですがご教示いただけますでしょうか
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- stuff_ppo
- ベストアンサー率62% (27/43)
jQueryの導入に問題がなければ、 var cloneTable = $('dataTableContainer').children(':first').clone() .attr('id', 'dataTable' + i) .attr('name', 'n_dataTable' + i)[0] などと簡単に記述できます。 ブラウザ間のJavaScriptの実装の相違を気にしなくてよくなりますし、 DOM要素の取り回しが非常に楽になりますので、 jQueryの導入は非常におすすめですよ。
- yyr446
- ベストアンサー率65% (870/1330)
試してみるか、テキストノードに name=" とかがない前提 var cloneTable = document.createElement("table"); var str = this.DataTable.innerHTML; var reg1 = /(.*)(\sname\s*=\s*".+?)(\s*".*)/gim; var reg2 = /(.*)(\sid\s*=\s*".+?)+?(\s*".*)/gim; var newstr = str.replace(reg1,"$1"+"$2"+"-cpy"+"$3"); newstr = newstr.replace(reg2,"$1"+"$2"+"-cpy"+"$3"); cloneTable.innerHTML = newstr;
- yyr446
- ベストアンサー率65% (870/1330)
var str = cloneTable.innerHTML; で内部HTMLを文字列取得して、正規表現を使ったリプレースで、 name="xxx" id="xxx" を name="xxx-2" id="xxx-2" に一括変更して cloneTable.innerHTML = str; でごそっと入れ替える。 ※イベントハンドラーとか、思いっきり問題ありそうだけど、、、