D3.js - 選擇

選擇是 D3.js 的核心概念之一。它基於 CSS 選擇器。它允許我們選擇網頁中的一個或多個元素。此外,它允許我們修改,追加或刪除與預定義資料集相關的元素。在本章中,我們將瞭解如何使用選擇來建立資料視覺化。

D3.js 有助於使用以下兩種方法從 HTML 頁面中選擇元素 -

  • select() - 通過匹配給定的 CSS 選擇器,僅選擇一個 DOM 元素。如果給定的 CSS 選擇器有多個元素,則僅選擇第一個元素。

  • selectAll() - 通過匹配給定的 CSS 選擇器來選擇所有 DOM 元素。如果你熟悉使用 jQuery 選擇元素,則 D3.js 選擇器幾乎相同。

讓我們詳細介紹每種方法。

select() 方法

select() 方法根據 CSS 選擇器選擇 HTML 元素。在 CSS 選擇器中,你可以通過以下三種方式定義和訪問 HTML 元素 -

  • HTML 元素的標記(例如 div,h1,p,span 等)
  • HTML 元素的類名
  • HTML 元素的 ID

讓我們通過例子看看它的實際效果。

按標籤選擇

你可以使用其 TAG 選擇 HTML 元素。以下語法用於選擇 div 標記元素,

d3.select("div")

示例 - 建立頁面“select_by_tag.html”並新增以下更改,

<!DOCTYPE html>
<html>
   <head>
      <script type = "text/javascript" src = "https://d3js.org/d3.v4.min.js"></script>
   </head>

   <body>
      <div>
         Hello World!    
      </div>
      
      <script>
         alert(d3.select("div").text());
      </script>
   </body>
</html>

通過瀏覽器請求網頁,你將在螢幕上看到以下輸出 -

Hello World!

按類名選擇

可以使用以下語法選擇使用 CSS 類設定樣式的 HTML 元素。

d3.select(.<class name>)

建立一個網頁“select_by_class.html”並新增以下更改 -

<!DOCTYPE html>
<html>
   <head>
      <script type = "text/javascript" src = "https://d3js.org/d3.v4.min.js"></script>
   </head>

   <body>
      <div class = "myclass">
         Hello World!
      </div>
      
      <script>
         alert(d3.select(".myclass").text());
      </script>
   </body>
</html>

通過瀏覽器請求網頁,你將在螢幕上看到以下輸出 -

Hello World!

按 ID 選擇

HTML 頁面中的每個元素都應具有唯一的 ID。我們可以使用元素的唯一 ID 來使用下面指定的 select() 方法來訪問它。

d3.select(“#<id of an element>”)

建立一個網頁“select_by_id.html”並新增以下更改。

<!DOCTYPE html>
<html>
   <head>
      <script type = "text/javascript" src = "https://d3js.org/d3.v4.min.js"></script>
   </head>

   <body>
      <div id = "hello">
         Hello World!
      </div>
      
      <script>
         alert(d3.select("#hello").text());
      </script>
   </body>
</html>

通過瀏覽器請求網頁,你將在螢幕上看到以下輸出。

Hello World!

新增 DOM 元素

D3.js 選擇提供 append()text() 方法,以將新元素附加到現有 HTML 文件中。本節將詳細介紹如何新增 DOM 元素。

append() 方法

append() 方法將新元素作為當前選擇中元素的最後一個子元素附加。此方法還可以修改元素的樣式,其屬性,屬性,HTML 和文字內容。

建立一個網頁“select_and_append.html”並新增以下更改 -

<!DOCTYPE html>
<html>
   <head>
      <script type = "text/javascript" src = "https://d3js.org/d3.v4.min.js"></script>
   </head>

   <body>
      <div class = "myclass">
         Hello World!
      </div>
      
      <script>
         d3.select("div.myclass").append("span");
      </script>
   </body>
</html>

通過瀏覽器請求網頁,你可以在螢幕上看到以下輸出,

Hello World!

這裡,append() 方法在 div 標籤內新增一個新標籤 span,如下所示 -

<div class = "myclass">
   Hello World!<span></span>
</div>

text() 方法

text() 方法用於設定所選/附加元素的內容。讓我們更改上面的示例並新增 text() 方法,如下所示。

<!DOCTYPE html>
<html>
   <head>
      <script type = "text/javascript" src = "https://d3js.org/d3.v4.min.js"></script>
   </head>

   <body>
      <div class = "myclass">
         Hello World!
      </div>
      
      <script>
         d3.select("div.myclass").append("span").text("from D3.js");
      </script>
   </body>
</html>

現在重新整理網頁,你將看到以下響應。

這裡,上面的指令碼執行連結操作。D3.js 巧妙地採用了一種稱為鏈語法的技術,你可以從** jQuery 中**識別出來。 通過將方法與句點連結在一起,你可以在一行程式碼中執行多個操作。它快速而簡單。相同的指令碼也可以在沒有鏈語法的情況下訪問,如下所示。

var body = d3.select("div.myclass");
var span = body.append("span");
span.text("from D3.js");

修改元素

D3.js 提供了各種方法, html()attr()style() 來修改所選元素的內容和樣式。讓我們看看本章中如何使用修改方法。

html() 方法

html() 方法用於設定所選/附加元素的 html 內容。

建立一個網頁“select_and_add_html.html”並新增以下程式碼。

<!DOCTYPE html>
<html>
   <head>
      <script type = "text/javascript" src = "https://d3js.org/d3.v4.min.js"></script>
   </head>

   <body>
      <div class = "myclass">
         Hello World!
      </div>
      
      <script>
         d3.select(".myclass").html("Hello World! <span>from D3.js</span>");
      </script>
   </body>
</html>

通過瀏覽器請求網頁,你將在螢幕上看到以下輸出。

Hello World!

attr() 方法

attr() 方法用於新增或更新所選元素的屬性。建立一個網頁“select_and_modify.html”並新增以下程式碼。

<!DOCTYPE html>
<html>
   <head>
      <script type = "text/javascript" src = "https://d3js.org/d3.v4.min.js"></script>
   </head>

   <body>
      <div class = "myclass">
         Hello World!
      </div>
      
      <script>
         d3.select(".myclass").attr("style", "color: red");
      </script>
   </body>
</html>

通過瀏覽器請求網頁,你將在螢幕上看到以下輸出。

Hello World!

style() 方法

style() 方法用於設定所選元素的樣式屬性。建立一個網頁“select_and_style.html”並新增以下程式碼。

<!DOCTYPE html>
<html>
   <head>
      <script type = "text/javascript" src = "https://d3js.org/d3.v4.min.js"></script>
   </head>

   <body>
      <div class = "myclass">
         Hello World!
      </div>
      
      <script>
         d3.select(".myclass").style("color", "red");
      </script>
   </body>
</html>

通過瀏覽器請求網頁,你將在螢幕上看到以下輸出。

Hello World!

classed() 方法

classed() 方法專門用於設定 HTML 元素的 class 屬性。因為,單個 HTML 元素可以有多個類; 在為 HTML 元素分配類時,我們需要小心。此方法知道如何處理元素上的一個或多個類,並且它將具有高效能。

  • 新增類 - 要新增類,必須將分類方法的第二個引數設定為 true。它定義如下 -
d3.select(".myclass").classed("myanotherclass", true);
  • 刪除類 - 要刪除類,必須將分類方法的第二個引數設定為 false。它定義如下 -
d3.select(".myclass").classed("myanotherclass", false);
  • 檢查類 - 要檢查是否存在類,只需省略第二個引數並傳遞要查詢的類名。如果存在則返回 true,否則返回 false。
d3.select(".myclass").classed("myanotherclass");

如果選擇中的任何元素具有類,則返回 true。使用 d3.select 進行單個元素選擇。

  • 切換類 - 將類翻轉到相反的狀態 - 如果它已經存在則將其刪除,如果它尚不存在則新增它 - 你可以執行以下操作之一。

    對於單個元素,程式碼可能如下所示 -

var element = d3.select(".myclass")
element.classed("myanotherclass", !oneBar.classed("myanotherclass"));

selectAll() 方法

selectAll() 方法用於選擇 HTML 文件中的多個元素。select 方法選擇第一個元素,但 selectAll 方法選擇與特定選擇器字串匹配的所有元素。如果選擇匹配 none,則返回空選擇。我們也可以在 selectAll() 方法中連結所有附加的修改方法, append()html()text()attr()style()classed() 等。在這種情況下,方法將影響所有匹配元素。讓我們通過建立新網頁“select_multiple.html”來理解並新增以下指令碼 -

<!DOCTYPE html>
<html>
   <head>
      <script type = "text/javascript" src = "https://d3js.org/d3.v4.min.js"></script>
   </head>

   <body>
      <h2 class = "myclass">Message</h2>
      <div class = "myclass">
         Hello World!
      </div>
      
      <script>
         d3.selectAll(".myclass").attr("style", "color: red");
      </script>
   </body>
</html>

通過瀏覽器請求網頁,你將在螢幕上看到以下輸出。

Message
Hello World!

這裡,attr() 方法適用於 divh2 標記, 兩個標記中文字的顏色都變為紅色。