12

この jQuery スニペットで一般的に使用されている最も明確なイディオムは何ですか?

$('#someTextarea').val( $('#someTextarea').val() + someString );

元のコードを 1 行の関数でラップするのは面倒です。

編集:だから私は関数を渡すことができます.

function lazylog (str) { 
    $('#ta').val( $('#ta').val() + str + '\n' );
}
// or
function lazylogPlain (str) {
    document.getElementById('ta').value += str + '\n';
}

// view results of little experiments
lazylog( test1() );
lazylog( test2() );
lazylog( test3() );
// etc...

そのコンテキストが異なる答えを生み出すのか、それともそれよりも少ないタイプを入力したいだけで本当に怠惰に見えるのかはわかりません. console.logカウントされません。テキストエリアが必要です。

4

4 に答える 4

31

jQueryは使用しないでください。

document.getElementById('someTextarea').value += someString;

より明確で高速になり、jQueryスニペットと同様に機能します。$セレクターを本当に使用したい場合は、要素を1つだけ使用することもできます

$('#someTextarea')[0].value += someString; // least to type

他の可能性は.val()、関数を使用したメソッドです

$('#someTextarea').val(function(index, oldValue) { return oldValue + someString; })

.each()または(これは、テキスト入力に対してval()が内部的に行うことと[ほぼ]同等です)のバリアント:

$('#someTextarea').each(function(){ this.value += someString; })

これらは両方とも、気に入らなかった1行の関数式を必要としますが、複数の選択された要素に対して機能するという利点があり(一致する要素がない場合は壊れません)、連鎖性機能を維持するためにjQueryオブジェクトも返します。

于 2012-05-07T19:34:58.127 に答える
8

関数を渡すことができます:

$(...).val(function(index, old) { return old + whatever; });
于 2012-05-07T19:25:44.260 に答える
8

慣用句についてはわかりませんが、この jQuery 式を単純化する 1 つの方法valは、関数オブジェクトをパラメーターとして受け取るオーバーロードを使用することです。jQuery は古い値を関数に渡し、新しい値を返します。

$('#someTextarea').val(function(_, oldValue) { return oldValue + something; }); 
于 2012-05-07T19:28:13.927 に答える
1
$('#someTextarea').val(function() {
  return this.value + something;
});

また

$('#someTextarea').val(function() {
  return $(this).val() + something; 
});

また

// mentioned by SLaks, JaredPar

$('#someTextarea').val(function(i, oldVal) {
  return oldVal + something;
});
于 2012-05-07T19:27:03.463 に答える