jquery .val()+ = idiom

时间:2012-05-07 19:24:27

标签: javascript jquery idioms

这个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。

4 个答案:

答案 0 :(得分:31)

只是不要使用jQuery。

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

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

$('#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对象以保留可连接性功能。

答案 1 :(得分:8)

您可以传递一项功能:

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

答案 2 :(得分:8)

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

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

答案 3 :(得分: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;
});