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
не учитывается, мне нужна текстовая область.
Ответы
Ответ 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;
});