Câu hỏi:
Cách hiệu quả nhất để tạo các phần tử HTML bằng jQuery là gì?
Câu trả lời:
Vì jQuery
sau đó tôi nghĩ nên sử dụng phương pháp (sạch) này (bạn đang sử dụng)
$('<div/>', {
'id':'myDiv',
'class':'myClass',
'text':'Text Only',
}).on('click', function(){
alert(this.id); // myDiv
}).appendTo('body');
BẢN GIỚI THIỆU.
Bằng cách này, bạn thậm chí có thể sử dụng trình xử lý sự kiện cho phần tử cụ thể như
$('<div/>', {
'id':'myDiv',
'class':'myClass',
'style':'cursor:pointer;font-weight:bold;',
'html':'<span>For HTML</span>',
'click':function(){ alert(this.id) },
'mouseenter':function(){ $(this).css('color', 'red'); },
'mouseleave':function(){ $(this).css('color', 'black'); }
}).appendTo('body');
BẢN GIỚI THIỆU.
Nhưng khi bạn đang xử lý nhiều yếu tố động, bạn nên tránh thêm sự kiện handlers
vào yếu tố cụ thể, thay vào đó, bạn nên sử dụng một trình xử lý sự kiện được ủy nhiệm, như
$(document).on('click', '.myClass', function(){
alert(this.innerHTML);
});
var i=1;
for(;i<=200;i++){
$('<div/>', {
'class':'myClass',
'html':'<span>Element'+i+'</span>'
}).appendTo('body');
}
BẢN GIỚI THIỆU.
Vì vậy, nếu bạn tạo và nối thêm hàng trăm phần tử với cùng một lớp, tức là ( myClass
) thì sẽ sử dụng ít bộ nhớ hơn để xử lý sự kiện, bởi vì chỉ có một trình xử lý sẽ ở đó để thực hiện công việc cho tất cả các phần tử được chèn động.
Cập nhật: Vì chúng ta có thể sử dụng phương pháp sau để tạo phần tử động
$('<input/>', {
'type': 'Text',
'value':'Some Text',
'size': '30'
}).appendTo("body");
Nhưng size
thuộc tính không thể được đặt bằng cách sử dụng phương pháp này bằng cách sử dụng jQuery-1.8.0
hoặc sau này và đây là một báo cáo lỗi cũ , hãy xem ví dụ này bằng cách sử dụng thuộc tính jQuery-1.7.2
đó cho thấy size
thuộc tính đó được đặt thành 30
sử dụng ví dụ trên nhưng sử dụng cùng một cách tiếp cận chúng ta không thể đặt size
thuộc tính bằng cách sử dụng jQuery-1.8.3
, ở đây là một fiddle không làm việc . Vì vậy, để đặt size
thuộc tính, chúng ta có thể sử dụng phương pháp sau
$('<input/>', {
'type': 'Text',
'value':'Some Text',
attr: { size: "30" }
}).appendTo("body");
Hoặc cái này
$('<input/>', {
'type': 'Text',
'value':'Some Text',
prop: { size: "30" }
}).appendTo("body");
Chúng tôi có thể vượt qua attr/prop
như một đối tượng con nhưng nó hoạt động trong jQuery-1.8.0 and later
các phiên bản kiểm tra ví dụ này nhưng nó sẽ không làm việc trong jQuery-1.7.2 or earlier
(không được thử nghiệm trong tất cả các phiên bản trước).
BTW, lấy từ jQuery
báo cáo lỗi
Có một số giải pháp. Đầu tiên là hoàn toàn không sử dụng nó, vì nó không giúp bạn tiết kiệm bất kỳ dung lượng nào và điều này giúp cải thiện sự rõ ràng của mã:
Họ khuyên nên sử dụng phương pháp tiếp cận sau (cũng hoạt động trong các phương pháp trước đó , đã thử nghiệm 1.6.4
)
$('<input/>')
.attr( { type:'text', size:50, autofocus:1 } )
.val("Some text").appendTo("body");
Vì vậy, tốt hơn là sử dụng phương pháp này, IMO. Bản cập nhật này được thực hiện sau khi tôi đọc / tìm thấy câu trả lời này và trong câu trả lời này cho thấy rằng nếu bạn sử dụng 'Size'(capital S)
thay vì 'size'
thì nó sẽ hoạt động tốt , ngay cả trongversion-2.0.2
$('<input>', {
'type' : 'text',
'Size' : '50', // size won't work
'autofocus' : 'true'
}).appendTo('body');
Cũng đọc về prop , bởi vì có một sự khác biệt Attributes vs. Properties
, nó thay đổi qua các phiên bản.