プロが教えるわが家の防犯対策術!

お世話になります。

「 var cloneTable = this.DataTable.cloneNode(true); 」

JavaScriptにて上記のようなコードでテーブルをコピーする必要があるのですが、
コピーするテーブル(DataTable)のセル内にはテキストボックスやプルダウンが入っています。
ただ単にコピーしてしまうと同一のnameやidのinput要素が出来てしまいます。
これを避けたいので、コピーしたテーブル「cloneTable」のname,id属性を別のものに変更し(何でもいい)
同一の名前になることをなんとか回避しようと考えたのですが、なかなかうまくいきません。。
そのようなことは可能なのでしょうか。
お手数ですがご教示いただけますでしょうか

A 回答 (3件)

jQueryの導入に問題がなければ、



var cloneTable = $('dataTableContainer').children(':first').clone()
    .attr('id', 'dataTable' + i)
    .attr('name', 'n_dataTable' + i)[0]

などと簡単に記述できます。

ブラウザ間のJavaScriptの実装の相違を気にしなくてよくなりますし、
DOM要素の取り回しが非常に楽になりますので、
jQueryの導入は非常におすすめですよ。
    • good
    • 0

試してみるか、テキストノードに 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;
    • good
    • 0

var str = cloneTable.innerHTML;


で内部HTMLを文字列取得して、正規表現を使ったリプレースで、
name="xxx" id="xxx" を name="xxx-2" id="xxx-2" に一括変更して
cloneTable.innerHTML = str;
でごそっと入れ替える。
※イベントハンドラーとか、思いっきり問題ありそうだけど、、、
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!