2012-05-07 26 views
12

Thành ngữ được sử dụng phổ biến nhất cho đoạn mã jQuery này là gì?jquery .val() + = thành ngữ

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

Nó cảm thấy vụng về để bọc các mã gốc trong một chức năng một dòng

EDIT: Vì vậy, tôi có thể vượt qua một chức năng, đó là mát mẻ ... nhưng ý định thực sự của tôi là dành cho jsfiddles, nơi tôi hiện đang thực hiện các công cụ như sau:

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... 

Không biết bối cảnh đó có tạo ra các câu trả lời khác nhau hay chỉ khiến tôi có vẻ rất lười biếng vì muốn nhập ít hơn thế. console.log không được tính, tôi muốn vùng văn bản.

+0

Không giải quyết nhu cầu làm việc trong jsfiddles, nhưng tôi thích ý tưởng mở rộng jQuery với một phương thức 'appendVal (string)' thúc đẩy val() dưới mui xe trong khi tránh cú pháp clunky desribed. –

Trả lời

31

Chỉ cần không sử dụng jQuery.

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

sẽ rõ ràng hơn, nhanh hơn và hoạt động cũng như đoạn mã jQuery. Nếu bạn thực sự muốn sử dụng bộ chọn $, chỉ với một yếu tố bạn cũng có thể

$('#someTextarea')[0].value += someString; // least to type 

khả năng khác là phương pháp .val() với một chức năng

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

hoặc một biến thể với .each() (đó là [gần ] tương đương với những gì val() thực hiện nội bộ cho các đầu vào văn bản):

$('#someTextarea').each(function(){ this.value += someString; }) 

Cả hai đều cần một chức năng một dòng expressio n bạn không thích, nhưng chúng có lợi thế là làm việc cho nhiều hơn một phần tử được chọn (và không phá vỡ không có phần tử phù hợp) và chúng cũng trả về đối tượng jQuery để duy trì tính năng chainability.

+4

muốn tôi có thể upvote này hai lần - một lần không có jquery trước khi tôi chỉnh sửa, một cho lừa [0] – gruntlr

+0

Hoàn toàn chính xác.+1 –

+0

@gruntlr & Bergi: thủ thuật '[0]' làm gì? – ajax333221

8

Bạn có thể vượt qua một chức năng:

$(...).val(function(index, old) { return old + whatever; }); 
1
$('#someTextarea').val(function() { 
    return this.value + something; 
}); 

hoặc

$('#someTextarea').val(function() { 
    return $(this).val() + something; 
}); 

hoặc

// mentioned by SLaks, JaredPar 

$('#someTextarea').val(function(i, oldVal) { 
    return oldVal + something; 
}); 
+1

'val()' đôi khi làm nhiều hơn việc truy cập trực tiếp thuộc tính DOM 'value'. –

+0

@AtesGoral nó luôn luôn loại bỏ các vận chuyển và chỉ thực hiện phép thuật khi phần tử là 'select' hoặc' option' – Esailija

+0

Hoặc bạn có thể tránh được hàm tạo jQuery thêm vô nghĩa bằng cách sử dụng 'val' đúng cách, như được minh họa trong các câu trả lời khác ... – lonesomeday

8

Tôi không biết về thành ngữ nhưng có một cách để đơn giản hóa jQuery này biểu thức là sử dụng quá tải của val có một đối tượng hàm làm tham số. jQuery sẽ chuyển giá trị cũ vào hàm và bạn trả về giá trị mới.

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

+1 cho lời giải thích chi tiết –

Các vấn đề liên quan