Tôi có một trang web liệt kê rất nhiều yếu tố [phim cụ thể], cấu trúc HTML của mọi mục theo một cách nào đó lớn và phức tạp [divs, hình ảnh, liên kết, lớp CSS, v.v.].
Đầu tiên tôi tải 100 phần tử và người dùng có tùy chọn tải 100 tiếp theo [điều này được thực hiện bằng cách sử dụng cuộn vô hạn]: Bây giờ, tôi thực hiện một bản kiến nghị AJAX yêu cầu 100 yếu tố khác và nó phản hồi bằng văn bản HTML [với tất cả chúng đã tải] và tôi chỉ nối nó vào tài liệu.
Nhưng, bây giờ tôi không muốn trả lời bằng văn bản HTML, thay vì điều đó tôi muốn trả lời với 100 phần tử dữ liệu trong JSON [tôi có thể làm điều đó], sau đó, câu hỏi của tôi là: đó là cách tốt nhất để thêm Các yếu tố này cho tài liệu bằng JavaScript?
Tôi biết rằng tôi có thể lặp qua mảng JSON và xây dựng mọi yếu tố, nhưng như tôi đã nói, đó là một cấu trúc HTML lớn và tôi không thực sự muốn tạo các div và sau đó gắn nó vào một div khác, đặt các lớp CSS, v.v. , bởi vì nó có thể bị rối loạn, lộn xộn và rất lớn ... Vì vậy, có một cách trong JavaScript để đạt được điều này có thể sử dụng một cái gì đó như các mẫu? Làm thế nào tôi có thể làm điều đó? Tôi chỉ muốn có được một mã sạch và tốt hơn.
Cấu trúc của mọi bộ phim là như thế này [tôi có thể sử dụng nó như một mẫu không?]:
Movie title
Details
My button
Ảnh của Pankaj Patel trên unplash
Mô hình đối tượng DOM hoặc tài liệu, là một phần không thể thiếu trong công việc của nhà phát triển web. Bởi vì nó đại diện cho cây phần tử được tìm thấy trong một trang web, nó xác định cấu trúc cơ bản của những gì trình duyệt cung cấp cho người dùng.
Mặc dù bạn có thể thêm và thao tác các phần tử DOM với JavaScript, mã hóa logic cho nó có thể cồng kềnh và lặp đi lặp lại nếu phần tử có nhiều thuộc tính và thuộc tính. Trong hướng dẫn này, chúng tôi sẽ tạo một phương thức cho phép bạn thêm các yếu tố phức tạp nhỏ gọn hơn.
Một ví dụ cấu trúc html dom
Đối với những người bạn không quen thuộc với khái niệm DOM, đó là cấu trúc phân cấp của các yếu tố HTML trên trang web. Đây là một mẫu nhanh dưới đây.
Một mẫu HTML DOM.Thêm phần tử DOM với JavaScript
Ngoài việc mã hóa một trang như trang trên hoặc yêu cầu một trang web sử dụng cơ sở dữ liệu để hiển thị phía máy chủ DOM, chúng tôi cũng có thể viết JavaScript thêm phần tử DOM và đưa ra các thuộc tính. Hãy cùng xem xét ba cách tiếp cận này.
Cách tiếp cận 1: Không có phương pháp bổ sung
Trong mẫu mã bên dưới, chúng tôi đang thêm một phần tử
0 và cung cấp cho nó một số thuộc tính [
1,
2 và
3] cũng như ba thuộc tính [
4,
5 và
6].Tạo một yếu tố với vani JavaScript.Trong khi điều này hoạt động, chúng tôi phải viết
0 sáu lần và chúng tôi phải viết
8 ba lần. Và nhiều thuộc tính hoặc thuộc tính hơn sẽ có nghĩa là lặp lại nhiều hơn.Cách tiếp cận 2: Gọi một phương thức tiện ích
Điều đó nói rằng, chúng ta có thể đưa sự lặp lại ra khỏi nó bằng cách viết một phương thức tiện ích tùy chỉnh cho phép chúng ta tạo các phần tử DOM theo cách nhỏ gọn hơn này:
Mẫu Createl Gọi phương thức. Hãy để điều này có thể!Trong ví dụ trên, chúng tôi gọi phương thức
9 là một phần của đối tượng let utils = {};
0 mới. Khi làm như vậy, chúng tôi chuyển qua một đối tượng với các thuộc tính và thuộc tính sẽ hiển thị trong phần tử kết quả.Mặc dù các thuộc tính trực tiếp trên đối tượng của chúng tôi, các thuộc tính nằm trong một đối tượng lồng nhau tương ứng với khóa
let utils = {};
1.attrs: {
dataFoo:'bar',
dataBaz:'garply,
title:'showModal[]'
}
Cũng lưu ý rằng các thuộc tính sử dụng Camelcase [
let utils = {};
2] thay vì cú pháp Dash [
4]. Tôi sẽ giải thích tại sao sớm.Cách tiếp cận 3: Tạo đối tượng và sau đó gọi phương thức
Để giúp chúng tôi phân biệt đối tượng chúng tôi truyền vào phương thức, đây là logic của chúng tôi trông như thế nào nếu chúng tôi khởi tạo đối tượng trước thời hạn.
Trong cả hai cách tiếp cận liên quan đến
let utils = {};
0, có ít sự lặp lại hơn so với cách tiếp cận 1.Trong phần tiếp theo của chúng tôi, chúng tôi sẽ mã hóa
let utils = {};
0 và phương thức
9 của nó. Bạn có thể sử dụng thư mục cục bộ với các tệp HTML và JavaScript hoặc hộp cát mã hóa như JSFiddle hoặc CodePen.Mã khởi đầu
Trong HTML của chúng tôi, hãy để tạo ra một yếu tố duy nhất mà chúng ta có thể nối lại mọi thứ.
Với JavaScript, hãy để tạo ra một đối tượng trống.
let utils = {};
Bây giờ, hãy để tạo ra một trình bao bọc ban đầu sẽ cung cấp cho đối tượng
let utils = {};
7 của chúng tôi phương thức chúng tôi tạo. Sau hướng dẫn này, bạn có thể viết các phương pháp khác bên trong trình bao bọc này.[function[context] { // methods go here}][utils];
Tạo phần tử HTML
Hãy bắt đầu bằng cách viết một bộ xương cho phương pháp
9. Tất cả những gì nó làm ngay bây giờ là lấy một đối tượng [let utils = {};
9] làm tham số và trả về phần tử HTML DOM.let utils = {};[function[context] { context.createEl = function[o] { let el = null; // additional code will go here. return el;
};}][utils];
Nó trông gọn gàng, nhưng cho đến nay, nó vô dụng!
Đặt loại phần tử
Để tạo yếu tố của chúng tôi, chúng tôi sẽ sử dụng
[function[context] { // methods go here}][utils];0. Vì thuộc tính đối tượng
[function[context] { // methods go here}][utils];1 là bắt buộc, chúng tôi đặt mặc định nếu nó không có trong đối tượng.
let utils = {};[function[context] { context.createEl = function[o] { let type = o.type || 'div'; let el = document.createElement[type]; return el;
};}][utils];
Tôi đang sử dụng
[function[context] { // methods go here}][utils];2 làm mặc định, nhưng nó có thể là bất cứ điều gì phù hợp với nhu cầu của bạn.
Thêm thuộc tính và thuộc tính
Bây giờ, hãy để thêm một cách để thêm thuộc tính và thuộc tính. Trong JavaScript, các thuộc tính như
1 và
2 có thể được thêm trực tiếp.el.className = 'myClass';
el.id = 'myClass-2';
Ngược lại, các thuộc tính phải được thêm vào thông qua
8.el.setAttribute['data-user','Nevin'];
Thêm thuộc tính
Trước tiên, hãy viết logic logic đặt các thuộc tính phần tử dựa trên các thuộc tính trong đối tượng truyền qua [
let utils = {};
9]. Để làm như vậy, chúng ta có thể nhận được một mảng các phím đối tượng bằng phương pháp [function[context] { // methods go here}][utils];7 và lặp qua chúng bằng cách sử dụng vòng lặp
[function[context] { // methods go here}][utils];8.
let el = document.createElement[type];for [const key of [Object.keys[o]]] {}
Có hai chìa khóa chúng tôi sẽ không muốn giải quyết ở đây:
[function[context] { // methods go here}][utils];1 và
let utils = {};
1. Vì vậy, hãy để thêm logic để loại trừ những điều đó.attrs: {
dataFoo:'bar',
dataBaz:'garply,
title:'showModal[]'
}
0Bây giờ, hãy để thêm một dòng cung cấp cho phần tử của chúng tôi là cặp giá trị khóa hiện tại của đối tượng.
attrs: {
dataFoo:'bar',
dataBaz:'garply,
title:'showModal[]'
}
1Vì vậy, bạn có thể kiểm tra công việc của bạn, đây là JavaScript của chúng tôi cho đến nay.
Thêm các thuộc tính
Trước khi chúng tôi thêm các thuộc tính, trước tiên, hãy kiểm tra xem thuộc tính
let utils = {};
1 có tồn tại hay không. Chúng tôi sẽ thêm nó ngay trước let utils = {};[function[context] { context.createEl = function[o] { let el = null; // additional code will go here. return el;2.
};}][utils];
attrs: {
dataFoo:'bar',
dataBaz:'garply,
title:'showModal[]'
}
2Bây giờ, hãy để quét qua các khóa thuộc tính. Thay vì sử dụng
[function[context] { // methods go here}][utils];7 trên
let utils = {};
9, chúng tôi đang khoan sâu hơn một cấp và sử dụng nó trên let utils = {};[function[context] { context.createEl = function[o] { let el = null; // additional code will go here. return el;5.
};}][utils];
attrs: {
dataFoo:'bar',
dataBaz:'garply,
title:'showModal[]'
}
3Một cái gì đó cần chú ý: Tôi đang sử dụng
let utils = {};[function[context] { context.createEl = function[o] { let el = null; // additional code will go here. return el;6 chứ không phải
};}][utils];
let utils = {};[function[context] { context.createEl = function[o] { let el = null; // additional code will go here. return el;7 ở đây. Bây giờ tôi tự hỏi tại sao điều đó có thể là…
};}][utils];
Tình huống khó xử
Một cảnh báo là trong HTML, các thuộc tính dữ liệu thường xảy ra dưới dạng cú pháp Dash:
attrs: {
dataFoo:'bar',
dataBaz:'garply,
title:'showModal[]'
}
4Vì dấu gạch ngang trong các khóa JavaScript sẽ ném lỗi
let utils = {};[function[context] { context.createEl = function[o] { let el = null; // additional code will go here. return el;8, các trích dẫn sẽ được yêu cầu để đặt các tên thuộc tính này mà không có lỗi trong
};}][utils];
9.attrs: {
dataFoo:'bar',
dataBaz:'garply,
title:'showModal[]'
}
5Bây giờ tôi không phải là một fan hâm mộ của những trích dẫn đó. Hãy nhớ rằng trong các phương pháp tiếp cận 2 và 3, cho thấy cách
9 nên hoạt động, tôi đã sử dụng Camelcase [let utils = {};
2] thay vì cú pháp Dash [
4].Vì vậy, chúng tôi có thể có sự sang trọng của việc viết Camelcase trong các cuộc gọi phương thức của chúng tôi, hãy để thêm logic thay đổi Camelcase trong đối tượng thành cú pháp Dash cho phần tử. Đầu tiên, hãy để kiểm tra bất kỳ chữ cái đầu tư nào bằng cách sử dụng toán tử logic không [
let utils = {};[function[context] { context.createEl = function[o] { let type = o.type || 'div'; let el = document.createElement[type]; return el;3].
};}][utils];
attrs: {
dataFoo:'bar',
dataBaz:'garply,
title:'showModal[]'
}
6Nếu
let utils = {};[function[context] { context.createEl = function[o] { let type = o.type || 'div'; let el = document.createElement[type]; return el;4 khác với
};}][utils];
let utils = {};[function[context] { context.createEl = function[o] { let type = o.type || 'div'; let el = document.createElement[type]; return el;5, điều đó có nghĩa là chúng tôi có ít nhất một chữ cái viết hoa. Hãy để xử lý thủ đô với một lớp lót bên dưới.
};}][utils];
attrs: {
dataFoo:'bar',
dataBaz:'garply,
title:'showModal[]'
}
7Dưới đây là một bản tóm tắt nhanh về cách một dòng mã này hoạt động:
- Chúng tôi gọi phương thức
let utils = {};[function[context] { context.createEl = function[o] { let type = o.type || 'div'; let el = document.createElement[type]; return el;
6 trên
};}][utils];let utils = {};[function[context] { context.createEl = function[o] { let type = o.type || 'div'; let el = document.createElement[type]; return el;
4 và sử dụng biểu thức thông thường
};}][utils];let utils = {};[function[context] { context.createEl = function[o] { let type = o.type || 'div'; let el = document.createElement[type]; return el;
8 để tìm kiếm tất cả các trường hợp của các chữ in hoa.
};}][utils]; - Nếu chúng tôi tìm thấy một chữ cái viết hoa, chúng tôi gán nó cho biến
let utils = {};[function[context] { context.createEl = function[o] { let type = o.type || 'div'; let el = document.createElement[type]; return el;
9 trong một cuộc gọi lại.
};}][utils]; - Chúng tôi sử dụng
el.className = 'myClass';
0 để chuyển đổi chữ cái vốn thành dấu gạch ngang [
el.id = 'myClass-2';el.className = 'myClass';
1] theo sau là trường hợp thấp hơn của nó.
el.id = 'myClass-2'; - Ví dụ:
let utils = {};
2 được thay đổi thành4 vì
el.className = 'myClass';
4 được thay thế bằng
el.id = 'myClass-2';el.className = 'myClass';
5.
el.id = 'myClass-2';
Ngoài ra: Để biết thêm chi tiết về cách thức hoạt động logic chính xác này, hãy xem bài viết của tôi về cách nó thay đổi Camelcase thành cú pháp Dash.
Sau khi kiểm tra Camelcase và hành động nếu cần, sau đó chúng tôi thêm cặp giá trị thuộc tính vào phần tử với cuộc gọi
8.attrs: {
dataFoo:'bar',
dataBaz:'garply,
title:'showModal[]'
}
8Đây là tất cả các logic thuộc tính cùng nhau:
Logic thuộc tínhHarking trở lại với một cái gì đó để chú ý đến từ trước đó: tiềm năng cần phải thay đổi cú pháp
let utils = {};[function[context] { context.createEl = function[o] { let type = o.type || 'div'; let el = document.createElement[type]; return el;4 thành Dash là lý do tại sao chúng tôi sử dụng
};}][utils];
let utils = {};[function[context] { context.createEl = function[o] { let el = null; // additional code will go here. return el;6 chứ không phải
};}][utils];
let utils = {};[function[context] { context.createEl = function[o] { let el = null; // additional code will go here. return el;7 để khởi tạo nó vì chúng tôi có thể thay đổi khóa sau khi nó được tạo.
};}][utils];
Kết thúc dòng
Hoan hô! Bây giờ chúng ta có thể phần tử của chúng ta với các thuộc tính và thuộc tính của nó. Dưới đây là phương pháp
9 đầy đủ.Thử nghiệm
Dưới đây là một bản demo rất cơ bản để bạn có thể thấy rằng phương pháp hoạt động như dự định. Khi bạn nhấp vào tên của tôi, màu của phông chữ sẽ thay đổi. Điều này là do một thuộc tính
6 đã được thêm vào với giá trị el.setAttribute['data-user','Nevin'];
2, một hàm bổ sung mà tôi đưa vào đây để chứng minh rằng thuộc tính đã được thêm vào.Ngoài ra, nếu bạn nghiên cứu các CSS, bạn cũng có thể thấy rằng hai thuộc tính
el.setAttribute['data-user','Nevin'];
3 khác và lớp phần tử đang được thêm vào như các kiểu CSS tương ứng hiển thị.
Trong trường hợp bạn tò mò, hàm ____82 tôi đã sử dụng bên dưới.
attrs: {
dataFoo:'bar',
dataBaz:'garply,
title:'showModal[]'
}
9Rất cám ơn Chris Coyier tại CSS Tricks cho chức năng tiện dụng!
Vì vậy, với một chút nỗ lực, bạn có thể viết thư mục nhỏ của riêng mình về các phương thức tiện ích DOM sẽ loại bỏ một số sự lặp lại và làm cho việc thêm các yếu tố trong JavaScript hiệu quả hơn. Cảm ơn vì đã đọc!
Ở nơi khác
Đây là chuyến đi sâu của tôi vào logic chuyển đổi cú pháp Camelcase/Dash.
Và phương pháp
el.setAttribute['data-user','Nevin'];
5 đến từ mảnh CSS này.Thêm nội dung tại Plainenglish.ioplainenglish.io