まず第一に-Javascriptフレームワークを調べてください。あなたが話している種類の機能は十分に進んでいるので、本当にすべてのブラウザでコードを正しく動作させたいのであれば、自分でこれを行うべきではありません。また、HTMLを醜いインラインJavascriptなどから解放することもできますが、これは悪い習慣と考えられています。
アイテムごとに2つの行を作成することを検討しましたか。1つは「編集モード」の行で、もう1つは「通常モード」の行です。「編集モード」の行をデフォルトで非表示にするようにスタイルを設定できます。誰かが編集リンクをクリックすると、その行を非表示にして、編集した行を表示できます。これは、編集フォームを取得するためにAJAX呼び出しを行うよりも本当に簡単です。
編集
始めるためのコードは次のとおりです。
function editRow(row_id, callback) {
// you would get this dynamically through ajax, thus why we need the callback
var html = '<tr id="edit_' + row_id + '" class="edit"><td><input type="text" name="td_1" value="Text 1"></td><td><input type="text" name="td_2" value="Text 2"></td><td><input type="submit" name="submit" value="submit"></td></tr>';
callback(html);
}
$('a.edit', '#data').click(function() {
var $tr = $(this).closest('tr');
var id = $tr.attr('id').split('_').pop();
var edit_row = '#edit_' + id;
if($(edit_row).length == 1) { // edit row already exists
$tr.hide();
$(edit_row).show();
} else { // doesn't exist, fetch it
editRow(id, function(html) {
$tr.hide();
$tr.after(html);
});
}
return false;
});
$(window).click(function(e) {
$('tr.edit:visible').each(function() {
var $tr = $(e.target).closest('tr');
var id = $(this).attr('id').split('_').pop();
console.log(e.target, $tr, this);
if($tr.attr('id') != this.id) {
$(this).hide();
$('#row_' + id).show();
}
});
});
おそらく、これをたくさん行うjQueryプラグインがたくさんあることに注意する必要があります。アプリケーションのニーズによっては、行をまったくフェッチしないで、毎回行をフェッチする方がよい場合があります。は、あなたが望むことを達成するためにあなたがしなければならないかもしれないことの単なる大まかな考えであり、残りはあなた次第です。:)