jquery .val()+ = idiom

gru*_*tlr 12 javascript jquery idioms

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

$('#someTextarea').val( $('#someTextarea').val() + someString );
Run Code Online (Sandbox Code Playgroud)

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

编辑:所以我可以传递一个功能,这很酷...但我的真实意图是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...
Run Code Online (Sandbox Code Playgroud)

不知道那个上下文是否会产生不同的答案,或者只是让我看起来真的很懒,想要输入的内容甚至更少. console.log不算,我想要textarea.

Ber*_*rgi 31

只是不要使用jQuery.

document.getElementById('someTextarea').value += someString;
Run Code Online (Sandbox Code Playgroud)

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

$('#someTextarea')[0].value += someString; // least to type
Run Code Online (Sandbox Code Playgroud)

其他可能性是.val()具有功能的方法

$('#someTextarea').val(function(index, oldValue) { return oldValue + someString; })
Run Code Online (Sandbox Code Playgroud)

或者是一个变体.each()(与[几乎]相当于val()内部的文本输入):

$('#someTextarea').each(function(){ this.value += someString; })
Run Code Online (Sandbox Code Playgroud)

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

  • 希望我可以两次投票 - 一次是在我编辑之前没有jquery,另一次是[0]技巧 (4认同)
  • @ ajax333221:请参阅[jQuery是否为数组?](http://stackoverflow.com/q/5827191/1048572),这将解释该行为.它只获取与jQuery对象关联的第一个DOM节点. (3认同)

SLa*_*aks 8

你可以传递一个功能:

$(...).val(function(index, old) { return old + whatever; });
Run Code Online (Sandbox Code Playgroud)


Jar*_*Par 8

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

$('#someTextarea').val(function(_, oldValue) { return oldValue + something; }); 
Run Code Online (Sandbox Code Playgroud)