2012-05-25 33 views
13

Trong jQuery, là có bất kỳ sự khác biệt giữa điều này:Tạo một phần tử rỗng với thẻ bắt đầu vs thẻ tự đóng

$('<div>').appendTo('body'); 

Và đây:

$('<div />').appendTo('body'); 

Tôi luôn nhìn thấy nó là " tự đóng "cách, nhưng tôi đã đi qua cách đầu tiên được sử dụng trong một số mã sản xuất mà không có lỗi. Bất kỳ cơ hội này sẽ gây ra vấn đề xuống dòng, hoặc là một thực hành chấp nhận được?

Trả lời

12

Các documentation nói:

Khi tham số có một thẻ duy nhất, chẳng hạn như $ (' < img/> ') hoặc $ (' <a> </a > '), jQuery tạo phần tử bằng cách sử dụng hàm JavaScript createElement() gốc.

Nó cũng nói:

Thẻ mà không thể chứa các thành phần có thể nhanh chóng đóng cửa hoặc không

Vì vậy, hình thức $('<div>') dường như làm việc cũng có, nhưng nó không có cơ sở. Rõ ràng từ tài liệu rằng ý định là thẻ cần thẻ đóng phải có thẻ đóng hoặc tự đóng.

Tôi sẽ tuân theo phiên bản được tài liệu vì điều đó ít có khả năng trở thành nạn nhân của thay đổi đột phá trong phiên bản sau này.

<rant>
Các thư viện jQuery có thói quen đặt càng nhiều càng tốt trong một cuộc gọi chức năng duy nhất (xem việc bổ sung gần đây on cho một ví dụ), do đó, nó không quá xa vời rằng họ sẽ phát minh ra một cái gì đó mới xảy ra khi bạn sử dụng một thẻ không tự đóng ...
</rant >

4

Cú pháp đó sẽ không gây ra sự cố miễn là không có gì xảy ra sau đó.

$("<div>") // Ok! 
$("<div>foobar") // Not Ok! 
$("<div><p>") // Not Ok! 

Để tham khảo, xem http://api.jquery.com/jQuery/#jQuery2

+1

Câu trả lời hay, nhưng sau khi xem qua tài liệu, tôi đã quyết định rằng mặc dù nó hoạt động, nó vẫn có thể không thực hành tốt nhất. –

6

số Cả này $("<div>") cũng không $("<div />") này sẽ gây ra vấn đề.

Bằng chứng là để nếu chúng tôi đi đến jQuery sources chúng ta có thể thấy rằng trong trường hợp chọn với cú pháp thẻ đơn <...> nó phân tích chọn với biểu hiện này thường xuyên:

rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/ 

nơi chỉ có một phần biểu tượng được sử dụng cho createElement và dấu gạch chéo có thể là tùy chọn.

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