jquery .val()+ = idiom

这个jQuery片段最常用的成语是什么?

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

将原始代码包装在单行函数中感觉很笨拙

编辑:所以我可以传递一个函数,这很酷…但我的真实意图是jsfiddles,我目前做的事情是这样的:

 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不算,我想要textarea。

只是不要使用jQuery。

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

将更清晰,更快速,并且与jQuery片段一样有效。 如果你真的想使用$ selector,你也可以只使用一个元素

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

其他可能性是带有函数的.val()方法

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

或者带有.each()的变体(它几乎等于val()在内部对文本输入的作用):

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

这些都需要一个你不喜欢的单行函数表达式,但它们具有为多个选定元素工作的优势(并且不会破坏没有匹配的元素),并且它们还返回jQuery对象以保留可链接性function。

你可以传递一个function:

 $(...).val(function(index, old) { return old + whatever; }); 

我不知道惯用语,但简化这个jQuery表达式的一种方法是使用val的重载,它将函数对象作为参数。 jQuery会将旧值传递给函数,然后传回新值。

 $('#someTextarea').val(function(_, oldValue) { return oldValue + something; }); 
 $('#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; });