Component phần 1: cơ bản về DOM

I am a developer, I write blogs occasionally. I hope you will find something new when reading my blogs.
Search for a command to run...

I am a developer, I write blogs occasionally. I hope you will find something new when reading my blogs.
No comments yet. Be the first to comment.
Trong series này mình sẽ chia sẻ về các cách khác nhau để làm giao diện website
Video ở bài trước giải quyết được vấn đề mà đề bài đó đưa ra, và đó cũng là cách tự nhiên khi tiếp xúc querySelector và DOM properties. Giờ chúng ta sẽ thử đưa ra thêm nhiều yêu cầu. Bài tập: tiếp tục từ đề bài ở bài viết trước đó: Thêm bộ đếm hiển ...
Login xong rồi thì làm gì? Tất nhiên là các thao tác xử lý dữ liệu. thường viết tắt là CRUD (Create Read Update Delete). Chúng ta sẽ làm tất cả trên Wordpress, tiếp nối 2 bài viết về login trước. CRUD với việc Login bằng Ultimate User Chúng ta cần ti...

Ở bài trước chúng ta đã có thể login bằng cách cài thêm plugin cho Wordpress. Về bản chất, đó là việc dùng Wordpress làm server xử lý thông tin đăng nhập. Wordpress vừa hiển thị giao diện, vừa xử lý thông tin đằng sau. Ở bài này chúng ta sẽ học cách ...

Tiếp nối với bài về Header thì chúng ta sẽ bàn đến nút Login / Signup có trên Header. Thường thì các flow phổ biến sẽ là: click nút Login / Signup sẽ dẫn sang trang Login, ở đó sẽ có nút dẫn sang trang Signup nếu chưa có tài khoản, hoặc có design sẽ...
Từ bài này trở đi chúng ta sẽ bắt đầu thực hành các kiến thức về UI Builder, Web component và React để làm từng thành phần của web. Đầu tiên là Header, hay còn được gọi là Navigation bar, Navigation menu,.... Mục đích của phần giao diện này là giới t...

Fonts, Sizes và Colors Vì chúng ta sẽ làm việc trực tiếp trên Wordpress + Elemetor nên bước này cả 3 sẽ giống nhau: Vào Site settings và cài đặt Global Colors để dùng cho Elementor Tạo global style trong Custom CSS để dùng CSS variable cho Web Comp...

Sau khi đã tiêu hóa lượng lớn nội dung về CSS ở bài trước, thì bài này sẽ là một mảng hoàn toàn khác. Sẽ có liên quan nhiều đến Javascript nên hãy kết hợp google thêm về Javascript cơ bản.
Có nhiều cách chia các loại giao diện, cách chia là khác nhau với mỗi người. Tuy nhiên với mình thì hay chia thành 3 loại:
Layout: đây không hẳn là "giao diện", mà giống như "cấu trúc", "cách sắp xếp" giao diện hơn. Tuy nhiên có nhiều loại layout khác nhau, và bạn phải viết code cho nó. Nên hãy coi nó là 1 loại giao diện.
Elements: đây là những phần giao diện nhỏ lẻ, nhìn thấy được, trực quan, góp phần tạo nên bộ nhận diện thương hiệu của 1 website. VD: Nút bấm, ô nhập liệu, Chữ tiêu đề, chữ body... Việc thể hiện màu sắc, font chữ, và các loại style khác trên những Elements này sẽ tạo nên 1 sự "quen thuộc" để tạo nên sự nhận diện.
Widgets: đây là những phần giao diện to hơn. Lắp ghép từ các Elements để tạo thành 1 nội dung gì đó cho website của bạn. Widgets thường sẽ là những phần giao diện có chứa logic đặc trưng của website của bạn, tức là nó sẽ làm việc nhiều với dữ liệu, hiển thị dữ liệu của website của bạn, xử lý dữ liệu.
Cả 3 thành phần Layout, Elements và Widgets này đều sẽ cần sử dụng đi sử dụng lại xuyên suốt các page của bạn. 1 Page = 1 vài Layout + 1 vài Widgets. Do đó khi xây dựng website bạn cần xây dựng Layout, Elements và Widgets trước.
1 phần giao diện (Elements hoặc Widgets) ngoài việc hiển thị, còn cần tương tác với người sử dụng. HTML CSS dùng để hiển thị, và Javascript sẽ như 1 bộ điều khiển giao diện để tương tác lại với người dùng.
Vậy chính xác Javascript điều khiển cái gì? Đó là DOM. Hiểu 1 cách đơn giản, HTML là code, khi được chạy bởi Browser, sẽ được chuyển thành DOM. DOM là biến Javascript, là Object của Browser (Không có môi trường Browser thì k có DOM).
1 trang web sẽ có nhiều DOM, để chọn được DOM cần tìm thì sử dụng querySelector và querySelectorAll (còn nhiều nữa nhưng 2 cái này dễ dùng nhất) . Dùng được ở cấp độ toàn trang (document.querySelector) hoặc ở cập độ trong phạm vi 1 element nhất định (element.querySelector)
các DOM sẽ có lưu thông tin về nội dung hiển thị (chữ, ảnh, các trạng thái,..) và có những method riêng tùy theo loại để tương tác
OK dưới đây mình sẽ điểm qua 1 số các loại DOM quan trọng.
DOM các thông tin quan trọng
classList: thông tin class của element
innerHTML: các tag HTML con (dạng string)
outterHTML: mã code HTML của element hiện tại
style: object chứa style của element. Có thể thay đổi giá trị để thấy giao diện thay đổi trực tiếp
parentElement: DOM element cấp cao hơn 1 bậc.
previousElementSibling: DOM ngay trước đó
nextElementSibling: DOM ngay sau đó
DOM các method quan trọng
classList.add: VD element.classList.add("abc") sẽ thêm class abc vào element
classList.remove: dùng để xóa class
classList.toggle: dùng để thêm class nếu không có hoặc xóa nếu đã có.
classList.contains: dùng để kiểm tra xem có class đó không. trả về true/false
remove: chạy element.remove() sẽ xóa luôn element đó đi
onclick: là listener để báo tin khi người dùng click vào element. (Kéo xuống cuối trang để hiểu hơn về Listener)
onMouseOver, onMouseEnter, onMouseLeave: là listener báo tin khi có trỏ chuột trỏ vào / trỏ ra element. (Khá giống với việc dùng :hover bên CSS)
append: chèn DOM vào làm element con ở cuối cùng
insertAdjacentHTML: chèn mã HTML vào làm element con ở cuối cùng
Tag <input />: Dùng để tạo ô nhập liệu
DOM các thông tin quan trọng
value: giá trị nhập liệu. Có thể thay đổi giá trị để thấy giao diện thay đổi trực tiếp.
name: khai báo tên của input, khá quan trọng khi dùng trong form.
type: kiểu của input, phổ biến nhất là text, number, password, file, checkbox
checked: dùng cho checkbox để biểu thị đã được check hay chưa
DOM các method quan trọng
oninput: là listener báo tin khi input đang được gõ chữ.
onchange: là listener báo tin khi input thay đổi value (khá giống oninput nhưng mất độ báo thưa hơn)
focus: chạy element.focus() sẽ giống việc click trỏ chuột vào ô input, sẽ có dấu nháy để nhập chữ
blur: chạy element.blur() sẽ giống như click trỏ chuột ra ngoài ô input, mất dấu nháy sẽ không nhập đc chữ nữa
Tag <form />: Là tổ hợp input và button
DOM các thông tin quan trọng
innerHTML: thường là chữ của nút bấm
type: thường nếu có type="submit" thì sẽ submit form
DOM các method quan trọng
Tag <form />: Là tổ hợp input và button
DOM các thông tin quan trọng
action: thường là địa chỉ url khi submit form thì sẽ redirect đến đây
method: thường là GET hoặc POST. cái này sẽ liên quan đến HTTP Method sẽ giới thiệu sau
innerHTML: chứa các input và button. Đặc biệt nếu input có name, thì ở cấp độ form có thể trỏ thẳng vào input đó bằng việc dùng element[name] mà không cần querySelector
DOM các method quan trọng
onsubmit: là listener báo tin khi form được submit. (user click button, hoặc bấm enter). có thể chặn việc redirect bằng việc gọi event.preventDefault()
submit: chạy element.submit() sẽ submit form
Tag <img />: Dùng để hiển thị ảnh. Tag <iframe />: Dùng để nhúng 1 website khác vào. 2 tag này nhìn chung về mặt cấu trúc khá giống nhau.
DOM các thông tin quan trọng
DOM các method quan trọng
onload: là listener báo tin khi nội dung đã được load xong. Cái này dùng để ứng dụng khi chưa load xong có thể show ra 1 cái thanh loading.
onerror: là listener báo tin lỗi khi load nội dung, die ảnh hay die web hoặc gì đó. Cái này dùng để thay thế nội dung lỗi bằng ảnh mặc định
Tag <a />: dùng để chèn link vào text/ảnh/khối giao diện
DOM các thông tin quan trọng
Trong mục method mình có nhắc đến Listener, các listener thường có từ on ở đầu, là việc lắng nghe sự kiện (chủ yếu được thực hiện bởi người dùng) để báo tin về cho code của mình.
Khác với các method khác có thể chạy bằng cách gọi trực tiếp. VD: element.remove(). Thì với Listner bạn cần gán cho nó 1 function thì khi báo tin đến, nó sẽ chạy cái function được gán. VD:
const buttonElement = document.querySelector('button');
if (buttonElement) {
buttonElement.onclick = function(event) {
alert('You clicked me');
}
}
Lưu ý: việc dùng querySelector không phải lúc nào cũng tìm thấy DOM (có thể viết sai query, hoặc element đã bị xóa, hoặc chưa đc tạo...). Trong các trường hợp đó sẽ trả về null, nên cần check bằng if trước khi gán listener.
function listener lúc nào cũng sẽ có 1 biến event để mang nhiều thông tin về event đó. tuy nhiên không phải lúc nào chúng ta cũng cần thiết sử dụng. nên một số chỗ sẽ viết là function() {} thay vì function(event) {}
Đề bài: Tạo 1 trang web về todo list thỏa mãn các yêu cầu:
có 1 ô nhập nội dung của todo, enter hoặc bấm nút sẽ thêm nội dung vừa nhập vào danh sách todo
hiển thị danh sách các todo đã nhập
mỗi todo sẽ có 1 checkbox, nếu checkbox đã check thì coi như là todo đó đã xong, hiện thanh gạch xuyên ngang todo đó
mỗi todo có nút xóa
có một nút để xóa tất cả các todo
Phân tích:
sử dụng form và listener onsubmit để xử lý khi nhập thêm todo mới
sử dụng innerHTML để tạo danh sách todo. sử dụng template string để chèn giá trị trực tiếp vào html
sử dụng listener onclick để xử lý các button
sử dụng listener onchange để xử lý việc checkbox được tích.
tham khảo Bài làm: