Подтвердить что ты не робот

Jquery.val() + = idiom

Какая наиболее распространенная идиома для этого фрагмента jQuery?

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

Он чувствует себя неуклюжим, чтобы обернуть исходный код в однострочную функцию

EDIT: Итак, я могу передать функцию, которая классная... но мои настоящие намерения для 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 не учитывается, мне нужна текстовая область.

4b9b3361

Ответ 1

Просто не используйте 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 для сохранения функция цепочки.

Ответ 2

Вы можете передать функцию:

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

Ответ 3

Я не знаю об идиоматике, но один из способов упростить это выражение jQuery - использовать перегрузку val, которая принимает объект функции в качестве параметра. jQuery передаст старое значение функции, и вы передадите новое значение.

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

Ответ 4

$('#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;
});