Dart程式設計 - HTML DOM



每個網頁都位於瀏覽器視窗內,瀏覽器視窗可以被視為一個物件。

一個文件物件代表顯示在視窗中的HTML文件。文件物件具有各種屬性,這些屬性引用其他物件,允許訪問和修改文件內容。

訪問和修改文件內容的方式稱為文件物件模型,或DOM。物件以層次結構組織。這種層次結構適用於Web文件中物件的組織。

  • 視窗 - 層次結構的頂部。它是物件層次結構的最外層元素。

  • 文件 - 載入到視窗中的每個HTML文件都成為一個文件物件。文件包含頁面的內容。

  • 元素 - 代表網頁上的內容。例如文字框、頁面標題等。

  • 節點 - 通常是元素,但它們也可以是屬性、文字、註釋和其他DOM型別。

以下是一些重要DOM物件的簡單層次結構:

HTML DOM

Dart提供dart:html庫來操作DOM中的物件和元素。基於控制檯的應用程式無法使用dart:html庫。要在Web應用程式中使用HTML庫,請匯入dart:html

import 'dart:html';

接下來,我們將討論下一節中的一些DOM操作

查詢DOM元素

dart:html庫提供querySelector函式來搜尋DOM中的元素。

Element querySelector(String selectors);

querySelector()函式返回與指定選擇器組匹配的第一個元素。“選擇器”應使用CSS選擇器語法,如下所示

var element1 = document.querySelector('.className'); 
var element2 = document.querySelector('#id'); 

示例:操作DOM

請按照Webstorm IDE中的以下步驟操作:

步驟1 - 檔案 -> 新建專案 -> 在位置處,將專案名稱設定為DemoWebApp

Demowebapp

步驟1 - 在“生成示例內容”部分,選擇SimpleWebApplication

Create

這將建立一個示例專案DemoWebApp。其中包含一個pubspec.yaml檔案,其中包含需要下載的依賴項。

name: 'DemoWebApp' 
version: 0.0.1 
description: An absolute bare-bones web app. 

#author: Your Name <email@example.com> 
#homepage: https://www.example.com  
environment:   
   sdk: '>=1.0.0 <2.0.0'  
dependencies:   
   browser: '>=0.10.0 <0.11.0'   dart_to_js_script_rewriter: '^1.0.1'  
transformers: 
- dart_to_js_script_rewriter 

如果已連線到網路,則這些依賴項將自動下載,否則可以右鍵單擊pubspec.yaml並獲取依賴項。

Pub Get Dependencies

在web資料夾中,您將找到三個檔案:index.html、main.dartstyle.css

index.html

<!DOCTYPE html>   
<html> 
   <head>     
      <meta charset = "utf-8">     
      <meta http-equiv = "X-UA-Compatible" content = "IE = edge">     
      <meta name = "viewport" content = "width = device-width, initial-scale = 1.0">
      <meta name = "scaffolded-by" content = "https://github.com/google/stagehand">
      <title>DemoWebApp</title>     
      <link rel = "stylesheet" href = "styles.css">     
      <script defer src = "main.dart" type = "application/dart"></script>
      <script defer src = "packages/browser/dart.js"></script> 
   </head>
   
   <body>   
      <h1>
         <div id = "output"></div> 
      </h1>  
   </body> 
</html> 

main.dart

import 'dart:html';  
void main() {   
   querySelector('#output').text = 'Your Dart web dom app is running!!!.'; 
} 

執行index.html檔案;您將在螢幕上看到以下輸出。

Demo Web App

事件處理

dart:html庫為DOM元素提供了onClick事件。語法顯示元素如何處理點選事件流。

querySelector('#Id').onClick.listen(eventHanlderFunction); 

querySelector()函式從給定的DOM返回元素,而onClick.listen()將採用一個eventHandler方法,該方法將在引發點選事件時被呼叫。eventHandler的語法如下:

void eventHanlderFunction (MouseEvent event){ } 

現在讓我們來看一個例子來理解Dart中事件處理的概念。

TestEvent.html

<!DOCTYPE html> 
<html> 
   <head> 
      <meta charset = "utf-8"> 
      <meta http-equiv = "X-UA-Compatible" content = "IE = edge"> 
      <meta name = "viewport" content = "width = device-width, initial-scale = 1.0"> 
      <meta name = "scaffolded-by" content ="https://github.com/google/stagehand"> 
      <title>DemoWebApp</title> 
      <link rel = "stylesheet" href = "styles.css"> 
      <script defer src = "TestEvent.dart" type="application/dart"></script> 
      <script defer src = "packages/browser/dart.js"></script> 
   </head> 
   
   <body> 
      <div id = "output"></div> 
      <h1> 
         <div> 
            Enter you name : <input type = "text" id = "txtName"> 
            <input type = "button" id = "btnWish" value="Wish"> 
         </div> 
      </h1> 
      <h2 id = "display"></h2> 
   </body>
   
</html>

TestEvent.dart

import 'dart:html'; 
void main() { 
   querySelector('#btnWish').onClick.listen(wishHandler); 
}  
void wishHandler(MouseEvent event){ 
   String name = (querySelector('#txtName')  as InputElement).value; 
   querySelector('#display').text = 'Hello Mr.'+ name; 
}

輸出

Output
廣告