瀏覽代碼

LibWeb: Add some helpers to the DOM Node class

This patch adds the following things needed by the HTML spec:

- Node::child_text_content()
- Node::is_connected()
- Node::root()
Andreas Kling 5 年之前
父節點
當前提交
128eaf9295
共有 2 個文件被更改,包括 31 次插入0 次删除
  1. 26 0
      Libraries/LibWeb/DOM/Node.cpp
  2. 5 0
      Libraries/LibWeb/DOM/Node.h

+ 26 - 0
Libraries/LibWeb/DOM/Node.cpp

@@ -155,4 +155,30 @@ void Node::dispatch_event(NonnullRefPtr<Event> event)
         parent()->dispatch_event(move(event));
 }
 
+String Node::child_text_content() const
+{
+    if (!is<ParentNode>(*this))
+        return String::empty();
+
+    StringBuilder builder;
+    to<ParentNode>(*this).for_each_child([&](auto& child) {
+        if (is<Text>(child))
+            builder.append(to<Text>(child).text_content());
+    });
+    return builder.build();
+}
+
+const Node* Node::root() const
+{
+    const Node* root = this;
+    while (root->parent())
+        root = root->parent();
+    return root;
+}
+
+bool Node::is_connected() const
+{
+    return root() && root()->is_document();
+}
+
 }

+ 5 - 0
Libraries/LibWeb/DOM/Node.h

@@ -94,8 +94,13 @@ public:
     const HTMLAnchorElement* enclosing_link_element() const;
     const HTMLElement* enclosing_html_element() const;
 
+    String child_text_content() const;
+
     virtual bool is_html_element() const { return false; }
 
+    const Node* root() const;
+    bool is_connected() const;
+
     template<typename T>
     const T* first_child_of_type() const;