fbpx
close

DOM là gì? DOM và JavaScript có mối quan hệ như thế nào?

Tác giả: Đông Tùng Ngày cập nhật: 02/08/2021 Chuyên mục: Webmasters
Disclosure
Website Wiki.tino.org được cung cấp bởi Tino Group. Truy cập và sử dụng website đồng nghĩa với việc bạn đồng ý với các điều khoản và điều kiện trong chính sách bảo mật - điều khoản sử dụng nội dung. Wiki.tino.org có thể thay đổi điều khoản sử dụng bất cứ lúc nào. Việc bạn tiếp tục sử dụng Wiki.tino.org sau khi thay đổi có nghĩa là bạn chấp nhận những thay đổi đó.
Why Trust Us
Các bài viết với hàm lượng tri thức cao tại wiki.tino.org được tạo ra bởi các chuyên viên Marketing vững chuyên môn và được kiểm duyệt nghiêm túc theo chính sách biên tập bởi đội ngũ biên tập viên dày dặn kinh nghiệm. Mọi nỗ lực của chúng tôi đều hướng đến mong muốn mang đến cho cộng đồng nguồn thông tin chất lượng, chính xác, khách quan, đồng thời tuân thủ các tiêu chuẩn cao nhất trong báo cáo và xuất bản.

JavaScrpit là một ngôn ngữ lập trình có nhiều chức năng, trong đó bao gồm việc thao tác với các tài liệu HTML. Tuy nhiên, để JavaScript làm được điều này phải thông qua một cơ chế gọi là DOM. Vậy DOM là gì? DOM và JavaScript có mối quan hệ như thế nào? Các bạn hãy cùng Tino Group tìm hiểu chi tiết qua bài biết dưới đây nhé!

DOM là gì?

Định nghĩa DOM

DOM là viết tắt của Document Object Model, tạm dịch: Mô hình Đối tượng Tài liệu, đây là một là một API lập trình cho các tài liệu HTML và XML. DOM xác định cấu trúc logic của các tài liệu và cách một tài liệu được truy cập và thao tác.

Với DOM, các lập trình viên được phép tạo và xây dựng tài liệu, điều hướng cấu trúc của chúng, đồng thời có thể thêm, sửa đổi hoặc xóa các phần tử và nội dung. Hiểu đơn giản, bất kỳ thứ gì được tìm thấy trong tài liệu HTML hoặc XML đều có thể được truy cập, thay đổi, xóa hoặc thêm bằng cách sử dụng DOM.

Trang web là một loại tài liệu. Tài liệu này có thể được hiển thị trong cửa sổ trình duyệt hoặc dưới dạng nguồn HTML. DOM là một đại diện hướng đối tượng của trang web, có thể được sửa đổi bằng ngôn ngữ lập trình như JavaScript.

DOM-la-gi

Các tiêu chuẩn DOM W3C và WHATWG DOM được triển khai trong hầu hết các trình duyệt hiện đại.

DOM và JavaScript

Mối quan hệ giữa DOM và JavaScript

DOM không phải là một ngôn ngữ lập trình, nhưng nếu không có API này, ngôn ngữ JavaScript sẽ không có bất kỳ mô hình hoặc khái niệm nào về các trang web, tài liệu HTML, tài liệu XML và các phần thành phần của chúng (ví dụ: các phần tử). Mọi phần tử trong tài liệu là một phần của DOM cho tài liệu đó, vì vậy tất cả chúng đều có thể được truy cập và thao tác bằng cách sử dụng DOM và một ngôn ngữ như JavaScript.

Với DOM, JavaScript sẽ thể hiện được tất cả các tính năng cần thiết để tạo ra HTML động như:

  • Có thể thay đổi hầu hết các phần tử HTML và thuộc tính của chúng trong trang
  • Có thể thay đổi tất cả các style CSS trong trang
  • Có thể loại bỏ các yếu tố HTML cũng như thuộc tính của chúng ở hiện tại
  • Có thể phản ứng với tất cả các sự kiện HTML hiện có trong trang và đồng thời tạo ra các sự kiện HTML mới
DOM-la-gi

Các loại DOM nào có trong JavaScript?

Việc JavaScript xử lý và làm việc với các phần tử HTML tương đối phức tạp và đa dạng. Do đó, xét về tính chất, DOM được chia làm 8 loại khác nhau gồm:

  • DOM document: có vai trò lưu trữ tất cả các thành phần trong tài liệu của trang web
  • DOM element: có nhiệm vụ truy xuất tới thẻ HTML bất kỳ thông qua các thuộc tính như tên class, id, name của thẻ HTML
  • DOM HTML: có chức năng thay đổi giá trị nội dung và giá trị thuộc tính của các thẻ HTML
  • DOM CSS: có nhiệm vụ thay đổi những định dạng CSS trong thẻ HTML
  • DOM Event: dùng để gán các sự kiện như onclick(), onload() vào các thẻ HTML
  • DOM Listener: có chức năng xác định và theo dõi các sự kiện tác động lên thẻ HTML đó
  • DOM Navigation: dùng để quản lý và thao tác với các thẻ HTML.
  • DOM Node, Nodelist: có chức năng thao tác với HTML thông qua các đối tượng (Object)

Cấu trúc của DOM

Node

Trong DOM, mọi thành phần tượng trưng cho 1 nút (node) và được biểu diễn trên cùng 1 cây. Các phần tử khác nhau sẽ là một loại nút khác nhau, trong đó 3 loại quan trọng nhất là: nút gốc (document node), nút phần tử (element node), nút văn bản (text node).

  • Document node: là tài liệu HTML và được biểu diễn bởi thẻ <html>.
  • Element node: đại diện cho 1 phần tử HTML.
  • Text node: mỗi đoạn ký tự trong tài liệu HTML, bên trong 1 thẻ HTML đều được xem là 1 nút văn bản. Chúng có thể là tên trang web trong thẻ <title>, tên đề mục trong thẻ <h1> hoặc một đoạn văn trong thẻ <p>.

Mối quan hệ giữa các nút

  • Nút gốc luôn là nút đầu tiên và ở trên cùng trong sơ đồ cây.
  • Tất cả các nút khác không phải là nút gốc đều chỉ có 1 nút cha duy nhất
  • Một nút có thể chứa một hoặc nhiều con bên dưới, nhưng cũng có thể không có con nào.
  • Những nút được tạo ra từ cùng nút cha được gọi là các nút anh em (siblings).
  • Trong các nút anh em, có thể gọi nút đầu tiên được gọi là con cả (firstChild) và xem nút cuối cùng là con út (lastChild).

Bạn có thể quan sát hình dưới đây để hiểu rõ hơn về DOM.

DOM-la-gi

Như đã thấy trong hình, tất cả các thẻ HTML sẽ xuất phát từ một đối tượng Document, thẻ ở vị trí cao nhất là thẻ html, kế tiếp là các phân nhánh body và head. Dưới thẻ head sẽ có những thẻ như style, title, … và bên dưới thẻ body thì là vô số các thẻ HTML khác.

Như vậy, nếu JavaScript muốn truy xuất đến một thẻ HTML bất kỳ thì phải thông qua đối tượng Document được lưu trữ trong một biến toàn cục tên là document.

Cách truy xuất DOM

Truy xuất gián tiếp

Mỗi một nút trên sơ đồ DOM đều có 6 thuộc tính quan hệ giúp bạn truy xuất gián tiếp theo vị trí của nút:

  • Node.parentNode: cho phép tham chiếu đến nút cha của nút hiện tại. Do đó, nếu bạn cần tìm nguồn gốc xa hơn nữa của 1 nút, bạn phải nối thuộc tình này nhiều lần. Ví dụ Node.parentNode.parentNode.
  • Node.childNodes: cho phép tham chiếu đến các nút con trực tiếp của nút hiện tại. Các nút con sẽ không bị phân biệt bởi loại nút, nên kết quả mảng trả về có thể sẽ gồm nhiều loại nút khác nhau.
  • Node.firstChild: cho phép tham chiếu đến nút con đầu tiên của nút hiện tại. Ví dụ: Node.childNodes[0].
  • Node.lastChild: cho phép tham chiếu đến nút con cuối cùng của nút hiện tại. Ví dụ: Node.childNodes[Element.childNodes.length-1].
  • Node.nextSibling: cho phép tham chiếu đến các nút anh em nằm sau nút hiện tại.
  • Node.previousSibling: cho phép tham chiếu đến nút anh em nằm trước nút hiện tại.

Truy xuất trực tiếp

Cách truy xuất này sẽ nhanh hơn và đơn giản hơn khi bạn không cần phải quan hệ và vị trí của nút. Để truy xuất trực tiếp, bạn hãy dùng 1 trong 3 cách sau:

  • document.getElementById(‘id_cần_tìm’)
  • document.getElementsByTagName(‘div’)
  • document.getElementsByName(‘tên_cần_tìm’)
DOM-la-gi

Hướng dẫn cách tạo mới, thêm, xoá và thay thế phần tử HTML bằng JavaScript

Cách tạo một phần tử HTML

Chúng ta có thể tạo mới 1 phần tử HTML bằng các cách sau:

document.createElement(tag_name): Dùng để tạo ra phần tử có thẻ tag_name như a, p, div,…

element.cloneNode(): Dùng để tạo ra 1 phần tử bằng cách nhân bản phần tử đó

document.createTextNode(text): Dùng để tạo ra 1 nút văn bản

DOM-la-gi

Xóa phần tử HTML

Để loại bỏ một phần tử HTML, bạn phải chọn phần tử cha rồi mới sử dụng phương thức removeChild(node)

Ví dụ:

<div id="demo">

<p id="p1">This is a paragraph.</p>

<p id="p2">This is another paragraph.</p>

</div>

<script>

var parent = document.getElementById("demo");

var child = document.getElementById("p1");

parent.removeChild(child);

</script>

Hoặc bạn cũng có thể sử dụng thủ thuật lấy thuộc tính parentNode để bỏ qua bước tìm phần tử cha trong DOM: child.parentNode.removeChild(child);

Ví dụ:

<div id="demo">

<p id="p1">This is a paragraph.</p>

<p id="p2">This is another paragraph.</p>

</div>

<script>

var child = document.getElementById("p1");

child.parentNode.removeChild(child);

</script>

Thay thế phần tử HTML

Để thay thể một phần HTML tử bằng một phần tử HTML khác, bạn hãy dùng cú pháp element.replaceChild(newNode, oldNode). Trong đó element sẽ là nút cha

<div id="demo">

<p id="p1">This is a paragraph.</p>

<p id="p2">This is another paragraph.</p>

</div>

<script>

var p = document.createElement("p");

p.innerText = 'New Text';

var parent = document.getElementById("demo");

var child = document.getElementById("p1");

parent.replaceChild(p, child);

</script>

Khi bước chân vào lĩnh vực lập trình, DOM là một khái niệm cơ bản mà bạn bắt buộc phải nắm rõ. Bài viết trên cũng khái quát một số thông tin liên quan đến DOM. Chúc bạn có thể thao tác với DOM thật hiệu quả nhé!

FAQs về DOM

HTML DOM khác gì với DOM?

DOM được chia thành nhiều loại, trong đó, HTML DOM là một cách gọi khác của DOM trong Javascript, loại DOM này được dùng để truy xuất đến các thẻ HTML và thay đổi dữ liệu cho thẻ HTML đó.

DOM implementation là gì?

DOM implementation (còn được gọi là triển khai máy chủ lưu trữ) là một phần mềm lấy tài liệu XML hoặc HTML đã được phân tích cú pháp và có sẵn để xử lý qua các giao diện DOM. Ví dụ: một trình duyệt chứa một triển khai lưu trữ.

Có phải DOM chỉ dùng cho JavaScript?

Điều này sẽ phụ thuộc vào việc triển khai lưu trữ mà bạn muốn sử dụng. Bạn có thể sử dụng DOM với ngôn ngữ JavaScript, VBScript, Scheme, Java, C++ , Perl và Python.

Tôi có thể đăng những câu hỏi về DOM ở đâu?

Mặc dù các câu hỏi về DOM có thể được đăng trên các diễn đàn khác, nhưng tốt nhất bạn nên đăng chúng vào danh sách gửi thư chung tại www-dom@w3.org.

5/5 - (1 bình chọn)

Đông Tùng

Senior Technology Writer

Là cử nhân Quản trị kinh doanh của Trường Đại học Tài chính - Marketing, Tùng bắt đầu làm việc tại Tino Group từ năm 2021 ở vị trí Content Marketing để thỏa mãn niềm đam mê viết lách của bản thân. Sở hữu khả năng sáng tạo đặc biệt, anh cùng đội ngũ của mình đã tạo nên những chiến dịch quảng cáo độc đáo cùng vô số bài viết hữu ích về nhiều chủ đề khác nhau. Sự tỉ mỉ, kiên trì và tinh thần sáng tạo của Tùng đã góp phần lớn vào thành công của Tino Group trong lĩnh vực marketing trực tuyến.

Xem thêm bài viết

Bài viết liên quan

Mục lục

Xem nhiều

giá tốt, chất lượng cao mình rất hài lòng
chất lượng dịch vụ tốt lắm...á
chất lượng dịch vụ rất tốt.
giá tốt, chất lượng cao mình rất hài lòng
Tino giá tốt,chất lượng cao,dịch vụ tư vấn và hổ trợ khách hàng tận tâm.
tôi rất thích sử dụng dịch vụ tại tinohostinohost. tốc độ tải nhanh và cực kỳ rẻ
Dịch vụ chăm sóc khách hàng tốt
Dùng rất oke nha mọi người
Dịch vụ chăm sóc khách hàng tốt, mình rất hài lòng về dịch vụ của TINOHOST
Đã mua rất nhiều tên miền tại Tinohost. Chất lượng tốt
Dịch vụ tốt, chăm sóc khách hàng chu đáo. Mình rất yên tâm khi sử dụng các dịch vụ của Tinohost.
dịch vụ và chăm sóc khách hàng rất tốt , mình rất thích tinohost , mình đã sử dụng nhiều dịch vụ của tinohost rồi
tuyệt vời chăm sóc khách hàng quá tốt
dịch vụ và chăm sóc khách hàng rất tốt , mình rất thích tinohost , mình đã sử dụng nhiều dịch vụ của tinohost rồi
Quá tốt - Quá xuất sắc và tuyệt
Hỗ trợ nhiệt tình. dịch vụ chất lượng
Đội ngũ support rất nhiệt tình.
Sử dụng dịch vụ của bạn Tinohost 2 3 năm nay chưa khi nào phải thất vọng.
dịch vụ hỗ trợ rất nhanh, tốc độ hosting tốt
Hộ trợ tốt, nhanh. Tuyệt vời 🥰
tuyệt vời, dịch vụ cực tốt và hỗ trợ siêu nhanh
Làm việc nhanh chóng, giá thành hợp lí.
Chất lượng phục vụ tốt, hỗ trợ khá nhanh chóng và chất lượng gói lớn tốt, gói nhỏ cần tốt hơn.
Hosting rẻ và nhanh thích hợp cho học sinh sinh viên như mình
dịch vu tốt ! Sẽ sử dụng thưởng xuyên !
Mỗi lần cần gì, nhắn Tino là được hỗ trợ ngay. Nên một đứa không biết gì về web như mình cũng tạo được blog. Cơ bản mình chỉ lo viết, mọi thứ có anh IT của Tino lo hết.
Nhìn chung thì Tino xứng đáng là một trong những nhà cung cấp host giá rẻ #1 tại VN. Bên này support khá nhanh và nhiệt tình nên quá trình sử dụng diễn ra tương đối trơn tru.
Chất lượng quá ok so với mức giá. Các SME có thể tham khảo để dựng web nhé.
uy tín chất lượng chuẩn cho 5 sao
Dịch vụ nhanh chóng thanh toán tiện lợi
Dịch vụ nhanh chóng, giá cả hợp lý
Chất lượng phục vụ ok, support khá nhanh chóng và chất lượng gói lớn tốt, gói nhỏ cần tốt hơn.
Dịch vụ tốt, giá cả hợp lý👍
Rất hay, rất tốt, rất hữu ích
Hỗ trợ rất nhanh và nhiệt tình
Chất lượng phục vụ ok, support khá nhanh chóng và chất lượng gói lớn tốt, gói nhỏ cần tốt hơn.
dịch vụ tốt, thanh toán nhanh chống
Hài lòng dịch vụ của tinohost
Sau khi sử dụng dịch vụ của TinoHost. Mình thấy website load nhanh hơn hẳn so với sử dụng ở nhà cung cấp cũ. Giá cả do mình đc mua với giá sale 99% của TinoHost nên rất là rẻ. Gói mình mua là gòi Hosting Bussiness 20GB. Thông số cấu hình cao nên web load khá mượt
Chúc TinoHost phát triển!
domain rẻ, có nhiều gói hữu ích thích hợp cho sinh viên
Dịch vụ tốt . Support nhiệt tình
Chất lượng OK
Nhanh chóng
Đã gia hạn thêm gói 1 năm nữa của TINO host. Chất lượng sản phẩm và dịch vụ thật sự tốt. AE nên trải nghiệm thử và tin dùng. Thank you TINO 👍
dịch vụ rất tốt
Nhân viên support nhanh, hỗ trợ nhiệt tình, giao dịch tự động nên khá tiện
Đã dùng nhiều dịch vụ tại Tinohost, chất lượng tốt, rất hài lòng ...😀
Các bạn hỗ trợ làm việc nhiệt tình và chuyên nghiệp!
Sự dụng rất hài lòng với các dịch vụ của tinohost
Dịch vụ tốt, uy tín chất lượng
Tino dịch vụ quá tuyệt vời
Giá rẻ, dịch vụ tốt, hỗ trợ nhanh chóng
dịch vụ rất tốt rất tuyệt vời
Giá hợp lý cho người mới dùng
Mình thấy Tinohost có giao diện thân thiện, dễ đăng ký sử dụng cho người mới tập tành làm web như mình. Hosting hỗ trợ có nhiều lựa chọn về dung lượng và giá cả! Thanh toán qua momo thuận tiện. Recommended!
wed quá ok làm việc nhanh ngọn
Dịch vụ tốt. Khá hài lòng vì support nhiệt tình
Dịch vụ quá tuyệt vời danh cho các bạn
đội sp của Tino rất nhiệt tình và nhanh chóng
Xin cảm ơn đội ngủ kỹ thuật. Các bạn rất chuyên nghiệp và thân thiện. Tôi sẽ giới thiệu các bạn cho bạn bè của mình.
Dịch vụ hỗ trợ tốt, ổn định, thanh toán dễ dàng.
Mình từng dùng VPS bên Vietel IDC, hay gặp lỗi vặt và bảo trì liên tục. Nhưng Tino thì rất ok
dùng tốt, nhanh, dễ sử dụng
Giao diện đẹp mắt, dễ sử dụng
Thích cách tư vấn tận tình và nhanh gọn của Tino mỗi khi có vấn đề trục trặc. Hosting ổn định, giá rẻ tốt lắm nhé mọi người
Đề nghị xem lại vấn đề phục vụ khách hàng (livchat)!
Good. Tốc độ cao. Tùy chỉnh nhiều trên shared hosting.
hosting ngon, giá luôn rẻ, tôi làm code nhưng rất thích sài host tino
Tino cung cấp host rất chuyên nghiệp. Đội ngũ kỹ thuật hỗ trợ rất tận tâm và nhiệt tình. Mình sẽ tiếp tục ủng hộ Tino 🥰.
Rất tuyệt vời🙆🙆🙆🙆🙆🙆🙆🙆🙆
Xét về tầm giá thì TinoHost rất đáng để mua và sử dụng lâu dài.
Dịch vụ chất lượng, ủng hộ 1 năm nay rồi
tuyệt vời quá đi,tuyệt vời quá đi
Tốc độ ổn định, tư vấn nhiệt tình
mới tham gia, mong mọi người hỗ trợ thêm
Tốc độ khá tốt với gói rẻ nhất 9k
Giao dịch nhanh,support nhanh và tận tình,chuyển miền nhanh,Hosting Ok
mua sản phẩm dịch vụ tinhot rất tốt tặng ad 5tr ** luon nè🥰🥰🥰
tinohost
một truong những nơi bán hosting rẻ, chất lượng dành cho anh em nào cần để làm web
mua tại : tinohost.com
Tư vấn tận tình và nhanh gọn mỗi khi có vấn đề trục trặc. Hosting ổn định, giá rẻ tốt lắm nhé mọi người
mình đã mua 2 tên miền + hosting của Tino Host . quả nhiên hiệu quả SEO cải thiện đáng kể và chứng chỉ bảo mật HTTPS miễn phí của Tino Host cũng ko kém phần quang trọng cho việc SEO website của mình
Tino host là một trong nhà cung cấp tốt nhất mình từng sử dụng. Với ưu đãi khuyến mại nhiều, giá thành rẻ kèm theo đó là sự support tuyệt vời của các admin. Nếu ai chưa lựa chọn được nhà cung cấp cho bản thân mình thì Tinohost sẽ là câu trả lời tốt nhất.
dịch vụ tốt, đội ngũ support nhiệt tình, cảm ơn #tinohost
Uy tín, chất lượng, nhân viên hỗ trợ nhiệt tình
mua 2 domain tại tinohost dùng rất chất lượng
Đã mua 02 domain và hosting tại TinoHost, hài lòng cách tư vấn và chăm sóc khách hàng của TinoHost :)
Giá rẻ cấu hình mạnh, black friday là sự bùng nổ của Tino
Hay web bán tài nguyên rất ngon
dịch vụ tốt, mua luôn host chất lượng cao của công ty nhân dịp blackfriday, cảm ơn #tinohost
Dịch vụ rất tốt, nhân viên tận tình.
Hỗ trợ nhiệt tình nhất trong các nhà cung cấp mih từng dùng. Không những server mạnh, ưu đãi có 1 không 2 mà còn nhiều plugin pro bản quyền đính kèm nữa. Quyết định gắn bó "Lifetime" với tino 😁
Dịch vụ tốt hỗ trợ nhanh chóng
Thích cách tư vấn tận tình và nhanh gọn của Tino mỗi khi có vấn đề trục trặc. Hosting ổn định, giá rẻ tốt lắm nhé mọi người
mình có mua 2 tên msiền của tino, mình rât thích cách tư vấn và chăm sóc khách hàng tại đây. Ngoài ra giá domain khá rẻ, phù hợp cho mọi người. 5 sao
Dịch vụ tốt, support nhiệt tình
tinohost tuyệt vời giá cả hợp lý
domain mua rất rẻ :))))
tốt, chất lượng, hostingok
Next Reviews
CÔNG TY CỔ PHẦN TẬP ĐOÀN TINO
Trụ sở chính: L17-11, Tầng 17, Tòa nhà Vincom Center, Số 72 Lê Thánh Tôn,  Phường Bến Nghé, Q. 1, TP. Hồ Chí Minh

Văn phòng kinh doanh: Số 42 Trần Phú, Phường 4, Quận 5, TP HCM
GPKD số 0315679836 do Sở KH và ĐT TP Hồ Chí Minh cấp
Hotline: 0364 333 333
Góp ý/Phản ánh dịch vụ: 0933 000 886