Bài 5: Mô hình DOM và CSS
Hệ thống bài cũ
Mô hình lập trình Mô hình lập trình Mô hình lập trình hướng đối tượng Mô hình lập trình hướng đối tượng Thuộc tính, phương thức và lớp Thuộc tính, phương thức và lớp Tạo đối tượng Tạo đối tượng Thêm thuộc tính và phương thức vào đối tượng Thêm thuộc tính và phương thức vào đối tượng Tạo lớp, tạo đối tượng từ lớp Tạo lớp, tạo đối tượng từ lớp Các thao tác với đối tượng trong lớp Các thao tác với đối tượng trong lớp Browser Object Model Browser Object Model
Mô hình DOM và CSS
2
Mục tiêu bài học
Giới thiệu về mô hình Document Object Model Giới thiệu về mô hình Document Object Model Giới thiệu về HTML DOM Giới thiệu về HTML DOM Cấu trúc DOM Cấu trúc DOM Thuộc tính của node Thuộc tính của node Phương thức của node Phương thức của node Truy cập đến node Truy cập đến node Thêm node Thêm node Xóa node Xóa node
Truy cập và thay đổi style của các element Truy cập và thay đổi style của các element Đối phó với các trình duyệt khác nhau Đối phó với các trình duyệt khác nhau
Mô hình DOM và CSS
3
Document Object Model
DOM là một chuẩn được định nghĩa bởi W3C (World Wide DOM là một chuẩn được định nghĩa bởi W3C (World Wide Web Consortium) để có thể truy cập và thao tác với các tài Web Consortium) để có thể truy cập và thao tác với các tài liệu như html hay xml bằng các ngôn ngữ lập trình như liệu như html hay xml bằng các ngôn ngữ lập trình như Javascript, VB… Javascript, VB…
that will
The Document Object Model is a platform- and language-neutral allow interface programs and scripts to dynamically access and update the content, structure and style of documents (Định nghĩa bởi W3C)
Mô hình DOM và CSS
4
DOM
DOM được chia thành 3 mức
Mô hình DOM và CSS
5
Core DOM: Tiêu chuẩn cho bất kỳ tài liệu có cấu trúc nào XML DOM: Tiêu chuẩn cho tài liệu XML HTML DOM: Tiêu chuẩn cho tài liệu HTML
HTML DOM
HTML DOM định nghĩa các đối tượng và thuộc tính của tất HTML DOM định nghĩa các đối tượng và thuộc tính của tất cả các thành phần HTML, và phương thức để truy cập đến cả các thành phần HTML, và phương thức để truy cập đến chúng chúng Hay: HTML DOM là chuẩn để lấy, thay đổi, thêm, xóa Hay: HTML DOM là chuẩn để lấy, thay đổi, thêm, xóa các thành phần HTML các thành phần HTML
Truy cập trang web http://www.w3schools.com/htmldom/default.asp/ để tìm hiểu thêm về HTML DOM
Mô hình DOM và CSS
6
Node trong DOM
Tất cả các thành phần trong tài liệu HTML đều được biểu diễn Tất cả các thành phần trong tài liệu HTML đều được biểu diễn bằng đối tượng node bằng đối tượng node
Mô hình DOM và CSS
7
Toàn bộ tài liệu là document node Toàn bộ tài liệu là document node Tất cả các thành phần của HTML đều là element node Tất cả các thành phần của HTML đều là element node Văn bản trong thành phần HTML là text node Văn bản trong thành phần HTML là text node Tất cả các thuộc tính là attribute node Tất cả các thuộc tính là attribute node Chú thích là comment node Chú thích là comment node
Tài liệu HTML ví dụ
Hello
Hello
Link Link
Node gốc là có hai node con là
và có một node con làMô hình DOM và CSS
8
Cấu trúc hình cây DOM
DOM trình bày tài liệu HTML theo cấu trúc hình cây DOM trình bày tài liệu HTML theo cấu trúc hình cây
Root Element: Root Element:
Hello
Hello
Link Link
Element: Element:
Element: Element:
Element:
Element:
Element: Element:
Element: Element:
Text: “Hi” Text: “Hi”
Text: Text: “Hello” “Hello”
Attribute: Attribute: “href” “href”
Text: Text: “Link” “Link”
Mô hình DOM và CSS
9
Quan hệ giữa các node
Giữa các node có mối quan hệ cha, con (parent, children) và Giữa các node có mối quan hệ cha, con (parent, children) và anh em (siplings) anh em (siplings)
Node cha có các node con, các node con cùng cấp bậc gọi là Node cha có các node con, các node con cùng cấp bậc gọi là anh em anh em
Trên cây, node đầu tiên được gọi là root (gốc) Trên cây, node đầu tiên được gọi là root (gốc) Tất cả các node, ngoại trừ root chỉ có một node cha Tất cả các node, ngoại trừ root chỉ có một node cha Một node có thể có nhiều node con hoặc không có node Một node có thể có nhiều node con hoặc không có node con nào con nào Node lá (leaf) là node không có node con Node lá (leaf) là node không có node con Những node anh em (siplings) với nhau là node có cùng một Những node anh em (siplings) với nhau là node có cùng một node cha node cha
Mô hình DOM và CSS
10
Quan hệ giữa các node
không có node cha, là node gốc không có node cha, là node gốc có hai node con là
và , và có hai node con là và , và là anh em là anh em có một node con là và , và là anh
chứa hai node con là và , và là anh
em
em Node cha của node
Node cha của text node “Hello” là node Mô hình DOM và CSS 11 Text node “Hi”, “Hello” , “Link” và attribute node “href” đều là
Text node “Hi”, “Hello” , “Link” và attribute node “href” đều là
node lá
node lá parentNode và là anh em, trong đó là con cả của firstChild g
n i
l i g
n i
l Là các con
của
và anh em
với nhau i i p
S
t
x
e
n p
S
s
u
o
v
e
r
p lastChild Mô hình DOM và CSS 12 Mô hình DOM và CSS 13 Truy cập đến node
Truy cập đến node
Thêm node con cho node
Thêm node con cho node
Xóa node con
Xóa node con Giải thích Thuộc tính
x là đối tượng node
x.innerHTML x.nodeName x.nodeValue x.nodeType
x.nodeType x.parentNode x.childNodes x.attributes Giá trị văn bản của x
Tên của x
Giá trị của x
Kiểu của Node
Kiểu của Node
Node cha của x
Các node con của x
Các node thuộc tính của x Mô hình DOM và CSS 14 Đọc thêm
http://www.w3schools.com/htmldom/dom_nodes_info.asp để
tra tra cứu thêm về các node Hoa Hong Hoa Hong Hoa Lan Hoa Lan Xem Demo Truy cap cac thuoc tinh của node
Mô hình DOM và CSS 15 attribute text document #document nodeValue element null attribute
attribute text nodeType element giá trị của thuộc tính
giá trị của thuộc tính
văn bản
1 attribute 2 text 3 comment 8 document 9 Mô hình DOM và CSS 16Con cả, con út
Root Element:
Element:
Element:
Thuộc tính và phương thức của node
DOM định nghĩa các thuộc tính và các phương thức cho
DOM định nghĩa các thuộc tính và các phương thức cho
các node để hỗ trợ cho việc lập trình
các node để hỗ trợ cho việc lập trình
Thuộc tính định nghĩa các đặc tính cho node
Thuộc tính định nghĩa các đặc tính cho node
Phương thức để thực hiện các thao tác với node
Phương thức để thực hiện các thao tác với node
Các thuộc tính của node
Demo truy cập thuộc tính của Node
Giá trị thuộc tính quan trọng
Thuộc tính
nodeName
Của node
element
Có giá trị là
Tên thẻ HTML tương ứng
Tên thuộc tính
#text
Demo về thuộc tính innerHTML
Nhấn vào đây để hiển thị ảnh: Nhấn vào đây để hiển thị ảnh:
Mô hình DOM và CSS
17
Demo về thuộc tính innerHTML
Xem Demo/InnerHTML
Mô hình DOM và CSS
18
Các phương thức của node
Giải thích
Thuộc tính x là đối tượng node x.getElementById(id)
Trả về thành phần có id xác định Trả về tất cả các thành phần với tên thẻ xác định Trả về tất cả các thành phần với tên thẻ xác định
x.getElementsByTagName x.getElementsByTagName (name) (name)
x.appendChild(node)
Mô hình DOM và CSS
19
x.removeChild(node) Thêm node con vào node x Xóa node con của node x
Truy cập đến các node
Có thể truy cập đến các node bằng 3 cách sau: Sử dụng phương thức getElementById(id) Sử dụng phương thức getElementsByName(name) Sử dụng phương thức getElementsByTagName(name) Sử dụng mối quan hệ giữa các node để điều hướng
Mô hình DOM và CSS
20
Demo sử dụng getElementById(id)
Hello
Hello
Link Link
Mô hình DOM và CSS
21
Demo sử dụng getElementById(id)
Giả sử đoạn mã được viết lại như sau Giả sử đoạn mã được viết lại như sau
Hello
Hello
Link Link
Tại sao không hiển thị hộp thoại???? Tại sao không hiển thị hộp thoại????
Mô hình DOM và CSS
22
Demo sử dụng getElementById(id)
Mô hình DOM và CSS
23
Trả lời: Tại vì Browser làm việc theo cơ chế thông dịch. Trả lời: Tại vì Browser làm việc theo cơ chế thông dịch. Tức là dịch từng dòng một, khi đến lệnh JavaScript Tức là dịch từng dòng một, khi đến lệnh JavaScript document.getElementById("link") thì chưa có Id nào tên là document.getElementById("link") thì chưa có Id nào tên là “Link” nên không có node nào trả về cho biến linkNode “Link” nên không có node nào trả về cho biến linkNode
Demo sử dụng getElementById(id)
Hãy dự đoán kết quả đoạn mã sau
Hello
Hello
Link Link
Mô hình DOM và CSS
24
Demo sử dụng getElementsByTagName(name)
How are you?
How are you?
I'm fine!
I'm fine!
Mô hình DOM và CSS
25
Demo điều hướng qua các node
Mã cho
Hoa Hong
Hoa Hong
Hoa Lan
Hoa Lan
Hoa Dao
Hoa Dao
Mô hình DOM và CSS
26
Xem cấu trúc DOM trong IEbug
pHoa trên IE có 3 node con
pHoa có 3 node con
Mô hình DOM và CSS
27
Demo điều hướng qua các node
Mã cho Mã cho
Hoa Hong
Hoa Hong
Hoa Lan
Hoa Lan
Hoa Dao
Hoa Dao
Mỗi Browser định nghĩa phương thức riêng để truy cập đến các phần tử
Cấu trúc DOM của mỗi Browser là khác nhau
Mô hình DOM và CSS
28
Xem cấu trúc DOM trong fireBug
pHoa trên fireFox có 7 node con
pHoa có 7 node con
Mô hình DOM và CSS
29
Mỗi browser có cách phân tích khác nhau theo mô hình DOM khác nhau
Tạo thêm các node element
Sử dụng phương thức createElement và appendChild để thêm các node element vào tài liệu
Thiết lập thuộc tính cho node element
Dùng phương thức setAttribute của node để thiết lập thuộc Dùng phương thức setAttribute của node để thiết lập thuộc tính cho chính node đó tính cho chính node đó
Mô hình DOM và CSS
31
Chú ý: Đoạn mã này dành cho
Xóa các node element
Sử dụng phương thức removeChild(nodeId) của node để xóa các node element của node
Hello
Hello
Hi
Hi
Hello
Hello
Hi
Hi
Mô hình DOM và CSS
32
Đoạn mã này dành cho Đoạn mã này dành cho
Nhắc lại về CSS
CSS định nghĩa màu sắc, font, layout… cho trang web CSS định nghĩa màu sắc, font, layout… cho trang web CSS bao gồm một tập các thuộc tính, mỗi thuộc tính có một CSS bao gồm một tập các thuộc tính, mỗi thuộc tính có một tập giá trị nhất định tập giá trị nhất định
font-family:arial; Selector cho biết thành phần nào sẽ được áp dụng Selector cho biết thành phần nào sẽ được áp dụng
selector { property:value;}
Có 3 loại Selector Có 3 loại Selector
Mô hình DOM và CSS
33
Thẻ Thẻ Lớp Lớp ID ID h1 { font-family:arial; } h1 { font-family:arial; } .tenClass { font-family:arial; } .tenClass { font-family:arial; } .tenId { font-family:arial; } .tenId { font-family:arial; }
JavaScript và CSS
Có thể sử dụng JavaScript để thay đổi style cho trang web Có thể sử dụng JavaScript để thay đổi style cho trang web JavaScript cung cấp đối tượng style cho mỗi element của JavaScript cung cấp đối tượng style cho mỗi element của trang web để thay đổi style của trang web trang web để thay đổi style của trang web Sử dụng thuộc tính style của mỗi element để truy cập đến Sử dụng thuộc tính style của mỗi element để truy cập đến đối tượng style đối tượng style var hTieuDe = document.getElementById("hTieuDe"); var hTieuDe = document.getElementById("hTieuDe"); hTieuDe.style.fontFamily = "arial" hTieuDe.style.fontFamily = "arial" Đối tượng style trong javascript có các thuộc tính tương ứng Đối tượng style trong javascript có các thuộc tính tương ứng với các thuộc tính của CSS với các thuộc tính của CSS
Mô hình DOM và CSS
34
Chú ý: Với các thuộc tính CSS có dấu gạch ngang thì sẽ được bỏ Chú ý: Với các thuộc tính CSS có dấu gạch ngang thì sẽ được bỏ dấu gạch ngang và viết hoa chữ cái của từ sau dấu gạch ngang dấu gạch ngang và viết hoa chữ cái của từ sau dấu gạch ngang (font-family fontFamily) (font-family fontFamily)
Thiết lập style cho các element
Có thể thiết lập style cho các thành phần bằng
Mô hình DOM và CSS
35
ID Thẻ Class
Thiết lập style bằng ID
Các bước thực hiện
Bước 1. Dùng ID để truy cập đến các element Bước 2. Sử dụng thuộc tính style để thiết lập style cho element đó
var hTieuDe = document.getElementById("hTieuDe"); var hTieuDe = document.getElementById("hTieuDe"); hTieuDe.style.fontFamily = "arial" hTieuDe.style.fontFamily = "arial"
Mô hình DOM và CSS
36
Demo thiết lập style bằng ID
Xem CSS
Mô hình DOM và CSS
37
Demo thiết lập style bằng ID
Thiet lap style bang ID
Thiet lap style bang ID
Mô hình DOM và CSS
38
Thiết lập style cho một nhóm phần tử
Vấn đề nảy sinh: Vấn đề nảy sinh:
Muốn thay đổi style cho nhiều phần tử Muốn thay đổi style cho nhiều phần tử
Giải pháp: Giải pháp:
Thiet lap style cho nhieu thanh phan
Thanh phan 1
Thanh phan 2
Thanh phan 3
Sử dụng phương thức getElementsByName hoặc Sử dụng phương thức getElementsByName hoặc getElementsByTagName để lấy một nhóm các phần tử getElementsByTagName để lấy một nhóm các phần tử Sử dụng vòng For để duyệt qua các phần tử Sử dụng vòng For để duyệt qua các phần tử
var pAr = document.getElementsByTagName("p"); for (var i = 0; i < pAr.length; i++) {
pAr[i].style.color = "blue";
Mô hình DOM và CSS
39
}
Lấy thông tin browser
Sử dụng thuộc tính userAgent của navigator
alert(navigator.userAgent)
Tạo ra các phiên bản khác nhau cho các browser
Mô hình DOM và CSS
40
Lấy thông tin browser
Vấn đề nảy sinh: Vấn đề nảy sinh:
Có rất nhiều trình duyệt Có rất nhiều trình duyệt Mỗi trình duyệt lại có nhiều phiên bản Mỗi trình duyệt lại có nhiều phiên bản Mỗi trình duyệt lại lại hỗ trợ ở các mức khác nhau Mỗi trình duyệt lại lại hỗ trợ ở các mức khác nhau
Để kiểm tra tất cả trình duyệt, phiên bản của trình duyệt là điều Để kiểm tra tất cả trình duyệt, phiên bản của trình duyệt là điều
không thể không thể
Thuộc tính userAgent cũng có thể trả về thông tin sai Thuộc tính userAgent cũng có thể trả về thông tin sai
Mô hình DOM và CSS
41
Cần có một giải pháp khác Cần có một giải pháp khác
Sử dụng cách thử
Sử dụng cách thử để biết trình duyệt hỗ trợ phương thức gì
if (typeof document.body.firstElementChild != "undefined") { if (typeof document.body.firstElementChild != "undefined") {
alert("Browser ho tro phuong thuc firstElementChild"); alert("Browser ho tro phuong thuc firstElementChild");
} else { } else {
alert("Browser khong ho tro phuong thuc firstElementChild"); alert("Browser khong ho tro phuong thuc firstElementChild");
} }
Mô hình DOM và CSS
42
Đối mặt với các browser cũ
Tạo mã javascript chạy tốt trên tất cả các version của tất cả Tạo mã javascript chạy tốt trên tất cả các version của tất cả các trình duyệt là điều không thể các trình duyệt là điều không thể Thiết lập một giới hạn hợp lý các trình duyệt và version để Thiết lập một giới hạn hợp lý các trình duyệt và version để hỗ trợ hỗ trợ Giới hạn càng hẹp thì càng ít khách hàng truy cập được vào Giới hạn càng hẹp thì càng ít khách hàng truy cập được vào website website Đối với browser không hỗ trợ javascript hoặc bị disable Đối với browser không hỗ trợ javascript hoặc bị disable javascript. javascript.
Mô hình DOM và CSS
43
Dùng thẻ Dùng thẻ Dùng thẻ <--> Dùng thẻ <-->
Xử lý sự kiện (tiếp bài 4)
Có thể dùng xử lý sự kiện để thay đổi lại nội dung, cấu trúc trang web
My First Web Page
My First Web Page
Đọc thêm Chương 11 để biết thêm về xử lý sự kiện
Mô hình DOM và CSS
44
Tổng kết bài học
DOM là một chuẩn được định nghĩa bởi W3C (World Wide DOM là một chuẩn được định nghĩa bởi W3C (World Wide Web Consortium) để có thể truy cập và thao tác với các tài Web Consortium) để có thể truy cập và thao tác với các tài liệu như html hay xml bằng các ngôn ngữ lập trình như liệu như html hay xml bằng các ngôn ngữ lập trình như Javascript, VB… Javascript, VB… DOM được chia làm 3 mức CoreDOM, HTML DOM, và XML DOM được chia làm 3 mức CoreDOM, HTML DOM, và XML DOM DOM HTML DOM định nghĩa các đối tượng và thuộc tính của tất HTML DOM định nghĩa các đối tượng và thuộc tính của tất cả các thành phần HTML, và phương thức để truy cập đến cả các thành phần HTML, và phương thức để truy cập đến chúng chúng Tất cả các thành phần trong tài liệu HTML đều được biểu diễn Tất cả các thành phần trong tài liệu HTML đều được biểu diễn bằng đối tượng node bằng đối tượng node DOM trình bày tài liệu HTML theo cấu trúc hình cây DOM trình bày tài liệu HTML theo cấu trúc hình cây Thuộc tính định nghĩa các đặc tính cho node như Thuộc tính định nghĩa các đặc tính cho node như nodeName, nodeValue, nodeType, innerText, childNodes, nodeName, nodeValue, nodeType, innerText, childNodes, parentNode… parentNode…
Mô hình DOM và CSS
45
Tổng kết bài học
Phương thức để thực hiện các thao tác với node như truy Phương thức để thực hiện các thao tác với node như truy cập đến node, thêm node con cho node và xóa node con cập đến node, thêm node con cho node và xóa node con Có thể truy cập đến các node bằng phương thức Có thể truy cập đến các node bằng phương thức getElementById(id), phương thức getElementById(id), phương thức getElementsByTagName(name) hoặc sử dụng mối quan getElementsByTagName(name) hoặc sử dụng mối quan hệ giữa các node để điều hướng hệ giữa các node để điều hướng Có rất nhiều trình duyệt, mỗi trình duyệt lại định nghĩa cấu Có rất nhiều trình duyệt, mỗi trình duyệt lại định nghĩa cấu trúc DOM và các thuộc tính, phương thức cho mỗi Node trúc DOM và các thuộc tính, phương thức cho mỗi Node các nhau Sử dụng cách thử để biết trình duyệt hỗ trợ các nhau Sử dụng cách thử để biết trình duyệt hỗ trợ phương thức nào phương thức nào JavaScript cung cấp đối tượng style trong mỗi element để JavaScript cung cấp đối tượng style trong mỗi element để thay đổi style cho các elemetn thay đổi style cho các elemetn
Mô hình DOM và CSS
46