2012-02-23 19 views
33

Sử dụng jquery là nó tốt hơn để tạo ra một phần tử DOM như thế này: -Cách tốt nhất để tạo ra các yếu tố DOM mới

function create(options) 
{ 
    $('<form action="' + options.action + '"></form>');  
} 

Hoặc như thế này:

function create(options) 
{ 
    $form = $('<form></form>'); 
    $form.attr('action',options.action); 
} 

Đây có thể là một vấn đề quan điểm. Tôi cảm thấy rằng cách thứ hai cho thấy rõ ràng hơn nhưng tôi nghi ngờ nó kém hiệu quả hơn ...

+0

Điều này được gọi là tối ưu hóa vi mô, còn được gọi là "gốc rễ của mọi điều ác". – JJJ

+0

@Juhana: Bạn đang nghĩ đến việc tối ưu hóa sớm. Tôi không biết tại sao hỏi về phương pháp xây dựng phần tử DOM sẽ được coi là sớm, hoặc thậm chí là mirco, tối ưu hóa. Từ câu hỏi ...* "Tôi cảm thấy rằng cách thứ hai mang lại sự rõ ràng hơn ..." * –

+0

* "... nhưng tôi nghi ngờ nó kém hiệu quả hơn." * Tôi nghĩ rằng nó an toàn để nói rằng anh ta không hỏi vì anh ta đã xác định vấn đề này là tắc nghẽn hiệu suất trong mã của anh ấy. – JJJ

Trả lời

27

jQuery có thể tạo đối tượng như đoạn mã sau

$form = $('<form>', {action: 'my action'}); 

class là một từ dành riêng trong IE và cần phải được trích dẫn . Xem danh sách đầy đủ các từ dành riêng: Reserved Keywords in Javascript

+0

+1 Hãy đánh bại tôi. Mặc dù bạn luôn phải bao gồm thẻ đóng vì một số trình duyệt (hiện đã lỗi thời) sẽ không tự động thêm thẻ này: Ví dụ: '$ ('

', {hành động: 'hành động của tôi'}); ' –

+0

không chỉ lỗi thời. Đã xảy ra sự cố với IE8 về việc không đóng 'form'-tag, bạn có thể làm như thế này' $ ('

') ' – andlrc

+5

Tôi muốn lớp IE8 là lỗi thời cá nhân: D –

1

Trừ khi bạn đang chạy chức năng này nhiều lần, bất kỳ sự khác biệt hiệu suất nào cũng sẽ không đáng kể. Vì vậy, tôi sẽ luôn luôn đi với rõ ràng nhất, dễ dàng nhất để cập nhật giải pháp (tức là thứ hai.)

+0

@NateBarbettini Âm thanh rất giống một câu trả lời cho tôi? – Anders

4

Tôi luôn làm điều thứ hai.

function create(options) 
{ 
    $form = $('<form></form>'); 
    $form.attr('action',options.action); 
} 

Tôi thích phương pháp này đơn giản vì nó dễ đọc hơn.

36

Check this để tự tìm hiểu.

Creating DOM notes using jQuery Note cao hơn là tốt hơn (OPS/Sec = operations per second = how many times per second the given code executes)

Và người chiến thắng thử nghiệm trong tất cả các trình duyệt khác ngoài Opera:

var form = document.createElement("form"), 
    $form = $(form); 
form.action = options.action; 

LƯU Ý:

phương pháp tự nhiên sẽ thậm chí còn nhanh hơn nếu bạn không cần một jQuery đối tượng:

var form = document.createElement("form"); 
form.action = options.action; 
+0

+1 Nếu có bất kỳ mối quan tâm nào về hiệu suất * và * rõ ràng, điều này sẽ chăm sóc cả hai. –

+0

+1 Tôi không biết về jsperf.com - điều đó rất gọn gàng, cảm ơn bạn đã giới thiệu! – rgvcorley

+0

+1 cho jsPerf và đề xuất không có jQuery. Mọi người có xu hướng làm mọi thứ với jQuery, họ nên biết khi nào thì tốt hơn hay không. – Lennon

3

Chưa bao giờ đau khổ để tối ưu hóa ... cho đến khi nó ... bạn có thể sử dụng thẳng lên JS:

function create(options) 
{ 
    var newform = document.createElement('form'); 

    newform.setAttribute('action',options.action); 
} 

Bên cạnh đó nó không đáng kể như đã đề cập ở trên, mọi thứ dễ đọc hơn cho bạn ... tức là tùy chọn 2

0

Không chắc chắn về mã gạch chân thực tế của jquery và không thể biết cái nào có hiệu suất tốt hơn.

Dù sao tôi có thể tưởng tượng, trong trường hợp đầu tiên, jquery sẽ phân tích cú pháp các thuộc tính và đặt giá trị cho chúng, vì vậy không nên có sự khác biệt lớn về hiệu suất.

Vì vậy, tôi nghĩ giải pháp đầu tiên thuận tiện hơn nếu nó chứa nhiều mã html, nếu không tôi sẽ ưu tiên thứ hai.

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