2010-12-02 13 views
3

私はHTMLのようなユーティリティのようなExcelを構築したい。私は20行& 20列のテーブル[id "myTbl"]を持っているとします。私はtdテキストをその値としてユーザがクリックするたびにtdの中にテキストボックスを追加したいと思います。クリックイベントをtd対テーブルにバインド

私のテーブルは、私は[両方が正常に動作している]これを達成するために2つのオプションをした
alt text

あるとし

オプションI

$("#myTbl").bind("click",function(e){ 
    var obj = e.target; 
    if(obj.nodeName == "TD"){ 
     $(obj).html("<input type='text' value='"+$(obj).html()+"'></input>"); 
    } 
}); 

オプションII

$("#myTbl tr td").bind("click",function(e){ 
    if($("input",$(this)).length==0){ 
     $(this).html("<input type='text' value='"+$(this).html()+"'></input>"); 
    } 
}); 

私の質問はwhiですchオプションはパフォーマンス面で優れています。

+1

は、事前に全ての細胞に隠されたテキストボックスを持っていないなぜ、/クリック時に、それを隠すとぼかし? –

+0

これでページサイズが大きくなります。また、ユーザが各tdをクリックする必要はありません。右? –

+0

そうだけどパフォーマンスについて聞いたことがあります。現代の帯域幅で余分なキロバイトが少しでもページの読み込み時間に目に見える影響はありません。 :) –

答えて

3

最初の2つのオプションはイベントハンドラを1つしか作成しないため、よりパフォーマンスが向上します。 あなたがそうしているようにイベントを介してターゲットを取得することは無視できます。

それを「jQueryの」道を行うには、あなたがdelegateを使用することがありますが:

$("#myTbl").delegate("td", "click", function() { 
    var $this = $(this); 
    $this.html("<input type='text' value='"+$this.text()+"'></input>"); 
}); 
+0

パンチに私を打つ。おそらく、デリゲートメソッドが1.4.2で追加されたので、最新のものを使用する必要があることに注意してください。 –

+0

このコードは、 'td'ごとにイベントハンドラを作成するのと同じことをしますか?また、なぜそれは 'jQuery'のやり方ですか? –

+0

いいえ、イベントハンドラは1つだけ作成されます。これはまさにこの目的のために意図されたjQuery関数なので、 'jQueryの方法'です。あなたのためにイベントターゲットロジックなどを処理します(ハンドラ関数のコンテキストは 'td'要素です)。 – sje397

1

各セルのすべてのクリックハンドラーを維持する余分なオーバーヘッドがないため、テーブルにバインドする方がずっと良いと言えます。

関連する問題