2012-05-07 38 views
12

什麼是這個jQuery的片段清晰的常用成語?jQuery的.VAL()+ =成語

$('#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。

+0

不解決需要在jsfiddles工作,但我喜歡用'appendVal(串)'是引擎蓋下利用VAL(),同時避免desribed笨重的語法方法延長的jQuery的想法。 –

回答

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; }) 

這些都需要一個單行函數expressio n您不喜歡,但他們有一個以上的選擇元素的工作(而不是打破了不匹配的元素),他們也返回jQuery對象保存chainability功能的優勢。

+4

希望我能給予好評此兩次 - 因爲沒有jQuery的一次,我以前編輯,另一個用於[0]欺騙 – gruntlr

+0

完全正確的。+1 –

+0

@gruntlr&Bergi:'[0]'技巧在做什麼? – ajax333221

8

你可以通過一個函數:

$(...).val(function(index, old) { return old + whatever; }); 
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; 
}); 
+1

'VAL()'有時的確不是直接訪問DOM'value'屬性的更多。 –

+0

@AtesGoral它總是刪除回車和只做魔法在元素是'select'或'option' – Esailija

+0

或者,您可以通過使用'val'得當,在其他的答案說明... – lonesomeday

8

我不知道,但慣用的一種方式,以簡化這個jQuery表達式是使用的重載將函數對象作爲參數。 jQuery會將舊值傳遞給函數,並傳回新值。

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

+1了詳細的解釋 –