12

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

4 回答 4

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 对象以保留可链接性功能。

于 2012-05-07T19:34:58.127 回答
8

您可以传递一个函数:

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

我不知道惯用语,但简化此 jQuery 表达式的一种方法是使用将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 回答