Cách ưa thích để tạo một phần tử mới với jQuery


227

Tôi đã có 2 cách tôi có thể tạo <div>bằng cách sử dụng jQuery.

Hoặc:

var div = $("<div></div>");
$("#box").append(div);

Hoặc là:

$("#box").append("<div></div>");

Những hạn chế của việc sử dụng cách thứ hai khác với khả năng sử dụng lại là gì?


8
Đó chỉ là vấn đề tái sử dụng. Cuộc gọi của bạn.
Roko C. Buljan

@gdoron bởi khả năng sử dụng lại Ý tôi là: nếu bạn có một phần tử bên trong một biến, hơn bạn có thể gọi lại var đó bất cứ nơi nào bạn cần, giống như trong ví dụ của bạn.
Roko C. Buljan

2
Tại sao .html, nhưng không phải .appendtrong trường hợp thứ 2?
Kỹ sư

@Engineer - Xin lỗi, đó là sai lầm ở đây. Tôi đã sửa nó.
Ashwin

Tôi nghĩ rằng phương pháp thứ hai nhanh hơn về mặt thực thi tốc độ nhưng phương pháp thứ nhất dường như (10% ~ 40%) nhanh hơn: jsperf.com/jquery-append-opes-vs-append-jquery-reference
Fabrizio Calderan

Câu trả lời:


339

Tùy chọn đầu tiên cho phép bạn linh hoạt hơn:

var $div = $("<div>", {id: "foo", "class": "a"});
$div.click(function(){ /* ... */ });
$("#box").append($div);

Và tất nhiên .html('*')ghi đè lên nội dung trong khi .append('*')không, nhưng tôi đoán, đây không phải là câu hỏi của bạn.

Một cách thực hành tốt khác là tiền tố các biến jQuery của bạn với $:
Có bất kỳ lý do cụ thể nào đằng sau việc sử dụng $ với biến trong jQuery không

Đặt dấu ngoặc kép quanh "class"tên thuộc tính sẽ làm cho nó tương thích hơn với các trình duyệt kém linh hoạt hơn.


10
Cũng là một cách thực hành tốt để bắt đầu tên bộ sưu tập jQuery bằng " $", theo ý kiến ​​của tôi. Chỉ cần lưu ý rằng những gì bạn đã làm không yêu cầu $div:$("<div>", {id: 'foo', class: 'a', click: function () {}}).appendTo("#box");
Thuốc nổ

Là những dấu hiệu đồng đô la cần thiết hoặc một lỗi đánh máy? $div. Tôi chưa từng thấy cú pháp đó trước đây, nhưng tôi chưa quen với Jquery.
felwithe

Tôi luôn sử dụng $ là biến là một đối tượng jquery, $ _ nếu nó là một bộ sưu tập jQuery và _var nếu nó là một bộ đếm. Các var cho các biến thông thường.
Casey

1
tài liệu cho cách tạo phần tử này ở đâu? $("<div>", {id: "foo", class: "a"});. Tôi muốn biết nếu có những lựa chọn khác cho nó
Saba Ahang

@gdoron làm ơn, hãy xem stackoverflow.com/questions353413044/
Vixed

74

Cá nhân tôi nghĩ rằng mã quan trọng hơn để có thể đọc và chỉnh sửa được hơn là hiệu suất. Bất cứ cái nào bạn thấy dễ nhìn hơn và nó nên là cái bạn chọn cho các yếu tố trên. Bạn có thể viết nó dưới dạng:

$('#box').append(
  $('<div/>')
    .attr("id", "newDiv1")
    .addClass("newDiv purple bloated")
    .append("<span/>")
      .text("hello world")
);

Và Phương pháp đầu tiên của bạn là:

// create an element with an object literal, defining properties
var $e = $("<div>", {id: "newDiv1", name: 'test', class: "aClass"});
$e.click(function(){ /* ... */ });
// add the element to the body
$("#box").append($e);

Nhưng khi có thể đọc được; Cách tiếp cận jQuery là yêu thích của tôi . Thực hiện theo các mẹo, ghi chú và thực tiễn tốt nhất về jQuery này


Cảm ơn vì liên kết đó đến tham chiếu jQuery về việc tạo các phần tử HTML mới . Rất khó để google cho điều đó.
Bob Stein


25

Cách biểu cảm hơn nhiều,

jQuery('<div/>', {
    "id": 'foo',
    "name": 'mainDiv',
    "class": 'wrapper',
    "click": function() {
      jQuery(this).toggleClass("test");
    }}).appendTo('selector');

Tham khảo: Tài liệu


4
classphải được trích dẫn, theo các tài liệu (thông qua liên kết Tài liệu ở trên): "Tên" lớp "phải được trích dẫn trong đối tượng vì đó là một từ dành riêng cho JavaScript và" className "không thể được sử dụng vì nó đề cập đến thuộc tính DOM , không phải thuộc tính. "
Isaac Gregson

5

Theo tài liệu chính thức của jQuery

Để tạo một phần tử HTML, $("<div/>")hoặc $("<div></div>")được ưa thích.

Sau đó, bạn có thể sử dụng một trong hai appendTo, append, before, aftervà vv ,. để chèn phần tử mới vào DOM.

PS: jQuery Phiên bản 1.11.x


2

Theo tài liệu cho 3.4 , nên sử dụng các thuộc tính với attr()phương thức.

$('<div></div>').attr(
  {
    id: 'some dynanmic|static id',
    "class": 'some dynanmic|static class'
  }
).click(function() {
  $( "span", this ).addClass( "bar" ); // example from the docs
});

Tôi đã thêm dấu ngoặc kép. Nếu bạn không đặt classdấu ngoặc kép, điều này sẽ âm thầm thất bại và có thể dẫn đến sự điên rồ.
John Henckel

0

Tôi muốn giới thiệu tùy chọn đầu tiên, nơi bạn thực sự xây dựng các phần tử bằng jQuery. cách tiếp cận thứ hai chỉ đơn giản là đặt thuộc tính bên trong của phần tử thành một chuỗi, điều này xảy ra là HTML và dễ bị lỗi hơn và kém linh hoạt hơn.


1
@Ash với cách tiếp cận thứ hai, bạn có thể xóa sạch tất cả những đứa trẻ khác của container mà bạn đang sửa đổi: jsfiddle.net/jbabey/RBXq5/1
jbabey

0

Nếu #boxtrống rỗng, không có gì, nhưng nếu nó không làm những điều rất khác nhau. Cái trước sẽ thêm một divnút con cuối cùng của #box. Sau này hoàn toàn thay thế nội dung của #boxvới một trống div, văn bản và tất cả.


Ồ .. ý tôi là không sử dụng nối vào đây;)
Ashwin

0

Cũng có thể tạo một phần tử div theo cách sau:

var my_div = document.createElement('div');

thêm lớp

my_div.classList.add('col-10');

cũng có thể thực hiện append()appendChild()

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.