Một vài điều rõ ràng về DOM


25

Tôi đã cố gắng để hiểu DOM, và mặc dù tôi có một ý tưởng công bằng về nó là gì, có một số ý tưởng nhất định tôi không thể xác định được. Tôi sẽ liệt kê những gì tôi nghĩ DOM là và các câu hỏi của tôi sẽ là nội tuyến.

  1. DOM là một đại diện hoàn toàn hướng đối tượng của trang web. Tiêu chuẩn DOM W3C tạo thành cơ sở của DOM được triển khai trong hầu hết các trình duyệt hiện đại.

    Vậy DOM có nói về cách một tài liệu XML / HTML được biểu diễn dưới dạng mô hình đối tượng không?

  2. DOM không chỉ định rằng các tài liệu phải được triển khai dưới dạng cây hoặc một khu rừng, và cũng không chỉ định cách thực hiện các mối quan hệ giữa các đối tượng.

    Các tài liệu có thể được trình bày theo những cách khác?

  3. Khi bạn làm một cái gì đó như thế này -

    document.write('welcome to my home page!');

    đối tượng tài liệu được cung cấp bởi DOM. Các phương thức ghi là các giao diện được DOM tiếp xúc với JavaScript.

    Vì vậy, các đối tượng và phương thức của nó được tạo bởi các đối tượng JavaScript bởi trình phân tích cú pháp DOM và sau đó được trình bày cho công cụ JavaScript? Hoặc các đối tượng và phương thức trong công cụ phân tích cú pháp DOM bằng ngôn ngữ mẹ đẻ của chúng? Và được tiếp xúc với công cụ JavaScript? Nếu điều này là như vậy, thì điều gì chịu trách nhiệm dịch từ JavaScript sang ngôn ngữ bản địa?

  4. Ràng buộc ngôn ngữ là gì?

    Liên kết ngôn ngữ là tập hợp các đối tượng có nguồn gốc từ ngôn ngữ được đề cập thực hiện từng giao diện trong đặc tả DOM.

    Các nhà phát triển có thể tạo các ràng buộc ngôn ngữ từ DOM sang ngôn ngữ của họ chỉ bằng cách làm theo IDL (Ngôn ngữ định nghĩa giao diện) trong đặc tả DOM.

    Vì vậy, nếu công cụ phân tích cú pháp DOM được triển khai trong C ++, điều đó có nghĩa là khi bạn tạo các ràng buộc ngôn ngữ bằng cách tuân theo IDL, bạn chỉ tạo các đối tượng bằng ngôn ngữ cụ thể, tức là C ++ mà công cụ phân tích cú pháp DOM của bạn được xây dựng?


@apsillers Đáng lẽ ra là "DOM có nói về cách một tài liệu XML / HTML được biểu diễn như một mô hình đối tượng không?" Tôi đã chỉnh sửa bài viết.
dùng1720897

Tôi sẽ trả lời những gì tôi có thể trong các ý kiến. 3 & 4 có thể khiến ai đó phát triển trình duyệt thực sự trả lời và tôi không muốn ảnh hưởng đến số câu trả lời. 1 - trình duyệt có hiểu biết về trạng thái hiện tại của tài liệu, bạn có thể gọi đây là DOM, thay vào đó bạn có thể gọi DOM là các giao diện chuẩn mà nó hiển thị cho phép bạn truy vấn và sửa đổi trạng thái của tài liệu.
George Mauer

2 - Tuyên bố là về thực hiện, không phải đại diện. Trừ khi tôi nhầm, '' đại diện '' phải là một cái cây. Việc thực hiện hậu trường không.
George Mauer

Câu trả lời:


19

Điều gì sau đây là đọc tốt nhất của tôi về các thông số kỹ thuật có liên quan và tài liệu tham khảo. (Tôi thấy các tóm tắt của Mozilla về các cấp DOM và các liên kết liên quan đặc biệt hữu ích.) Tôi khuyến khích sửa chữa hoặc làm rõ từ những người khác.

Vậy DOM có nói về cách một tài liệu XML / HTML được biểu diễn dưới dạng mô hình đối tượng không?

Vâng. Có hai phần để đặc tả DOM Cấp 1 - CoreHTML . Các lõi đặc tả DOM mô tả một chung DOM mà có thể được sử dụng để đại diện cho bất kỳ tài liệu có cấu trúc. Các HTML đặc tả DOM mô tả làm thế nào để sử dụng Lõi DOM để mô tả tài liệu HTML đặc biệt và bao gồm giao diện HTML cụ thể.

DOM không chỉ định rằng các tài liệu phải được triển khai dưới dạng cây hoặc một khu rừng, và cũng không chỉ định cách thực hiện các mối quan hệ giữa các đối tượng. Các tài liệu có thể được trình bày theo những cách khác?

Lõi DOM không giả định rằng tài liệu là một cái cây. Các Nodegiao diện là "... datatype chính cho toàn bộ [DOM]. Nó đại diện cho một nút duy nhất trong cây tài liệu ." Nodecó một số thuộc tính cho trẻ em truy cập vào, anh chị em, và các nút cha mẹ (ví dụ parentNode, frstChildvv) mà ngụ ý một cấu trúc cây. Bạn có thể sử dụng cây phẳng hoặc cây tuyến tính (ví dụ: danh sách được liên kết), nhưng nó vẫn sẽ là một dạng cây.

Như George Mauer đã chỉ ra trong các bình luận, có lẽ bạn muốn nói rằng mô hình cơ bản của một triển khai cụ thể không cần phải là một cái cây. Điều đó là đúng; miễn là việc triển khai của bạn cung cấp chức năng được hứa hẹn trong đặc tả DOM, bạn có thể sử dụng bất kỳ cấu trúc nào bạn muốn để cung cấp chức năng đó.

Các đối tượng và phương thức trong công cụ phân tích cú pháp DOM bằng ngôn ngữ mẹ đẻ của chúng phải không?

Nói chung là . Trong hầu hết các trình duyệt, DOM được triển khai bằng ngôn ngữ cấp thấp hơn như C và trình duyệt cung cấp các ràng buộc cho môi trường JavaScript có thể thao tác các biểu diễn thực tế. Trong thực tế, nếu bạn nhìn vào câu hỏi Ý nghĩa của việc di chuyển DOM vào Javascript , bạn sẽ thấy Google quan tâm đến việc chuyển sang triển khai DOM DOM gốc (có thể tránh cần cả chức năng C ++ trình bao bọc JavaScript trùng lặp cho chức năng C ++ đó; cũng có thể để tăng hiệu suất).

Điều gì chịu trách nhiệm dịch từ JavaScript sang ngôn ngữ bản địa?

Tôi hơi khó hiểu hơn về chủ đề này, nhưng tôi hiểu là khi liên kết JavaScript DOM được gọi, môi trường thực thi JavaScript (được thực hiện bằng ngôn ngữ cấp thấp hơn như C) thực hiện cuộc gọi đến hàm DOM có liên quan (được viết bằng C / C ++) để thao tác DOM.

Nếu bạn muốn đi sâu hơn thế, bạn sẽ cần nói chuyện với một người thực sự làm trình duyệt.

điều đó có nghĩa là khi bạn tạo các ràng buộc ngôn ngữ bằng cách tuân theo IDL, bạn chỉ tạo các đối tượng bằng ngôn ngữ cụ thể, tức là C ++ mà công cụ phân tích cú pháp DOM của bạn được xây dựng?

Vâng. IDL của DOM không liên quan đến ngôn ngữ, do đó bạn có thể triển khai nó bằng bất kỳ ngôn ngữ nào. "Viết một triển khai DOM" có nghĩa là viết mã (bằng một ngôn ngữ cụ thể) để tuân thủ các giao diện IDL được mô tả trong thông số kỹ thuật của DOM.


Tôi tin rằng ràng buộc sẽ phải liên quan đến hai điều. Gọi thời gian chạy gốc thông qua các tài liệu tham khảo và một số cách để nhận các sự kiện từ việc triển khai riêng. Bạn thực sự có thể thấy phương thức nào chỉ là trình bao bọc mã gốc trong trình duyệt bằng cách ghi bàn điều khiển thông thường. ví dụ console.log(document.write);hoặc console.log(document.constructor);- thêm .toString()các param log trong các trình duyệt mà không cung cấp cho bạn các văn bản chức năng. Các đối tượng không nhất thiết phải có một tương đương được nhân đôi trong mã gốc. Ngoài ra, hầu hết các thuộc tính đối tượng DOM thực sự là các getters với hành vi liên quan.
Erik Reppen
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.