目前來說進行專案還都主要以 Bootstrap 4 版本為主,透過專案的需求要做出提示功能,正好利用這個機會多了解 Bootstrap 5 版使用 JavaScript 原生 Vanilla.js 寫法。

原生的 JavaScript 用法 — Vanilla.js 介紹

Bootstarp Popovers 官方文件連結:英文中文


起手式

CDN 引入相關連結


在任何地方啟用彈出提示框 (操作全部 [data-bs-toggle=”popover”] 屬性)

類陣列的處理

類陣列 (Array-Likes) 主要是由多個選定 DOM 元素所產生的結構,與純陣列的呈現方式有點像,但最大的差別就是 __prototype__ 下的操作陣列方法較少,在 Bootstrap 的官方文件才透過 [].slice.call(document.querySelectorAll('[data-bs-toggle="popover"]')) 將類陣列轉換成存陣列結構。

先以 Bootstrap 官方文件中的四個方向 Popover 為例,取用四個按鈕為操作對象。

上面程式碼的部份,主要是要用來看類陣列與存陣列的差別,首先先將 getAllPopoverNodelist 展開查看,此時會發現類陣列 NodeList(4) 的下方 __prototye__ 可使用的相關方法很少,像是常用的陣列方法 .map() 是沒有列在裡面。

[].slice.call(arguments) 將類陣列轉換成為純陣列元素

[].slice.call(document.querySelectorAll('[data-bs-toggle="popover"]'))
將對象有 data-bs-toggle="popover" 屬性的元素取出當成參數,取出後會是個類陣列。

查看轉換成將 Node List 轉換成 DOM 元素的陣列後,展開的 __prototye__ 可見到相關的陣列方法會比較多。

將類陣列轉換成陣列元素,除了使用 [].slice.call() 外,也可以透過 [...<Node List>] 處理轉換。

參考資料:

BootStrp 5 DOM 元素類陣列與陣列操作

See the Pen BootStrp 5 – DOM 元素類陣列與陣列操作與 Popover 在任何地方啟用彈出提示框 by Jimmy_Wu (@Jimmy_Wu) on CodePen.

另外這裡提,選 DOM 元素 document.querySelectorAll('[data-bs-toggle="popover"]') 方式裡面有 .forEach() 的陣列方法,實際以迴圈執行建構新的 Popover 物件 ( new bootstrap.Popover(<建構綁定元素對象>)),也確實沒問題。


指定單一元素對象建構 Popover

單一元素對象基本建構 Popover

除了透過 document.querySelectorAll('[data-bs-toggle="popover"]') 一次選取 DOM 結構中所有的元素中有 data-bs-toggle="popover" 屬性的對象元素外,另外也可以直接指定單一對象進行操作,下面是直接以 JavaScript 透過 document.getElementById('example') 選取對象將 <a id="example"> 連結標籤為 Popover 建構綁定對象,指定好綁定對象後自然也可以透過 Popover 的方法進行動態操作。

透過 console.log('examplePopover', examplePopover) 查看,會在開發者工具上回應是一個 Object {} 物件,這樣的方式就是指透過 new bootstrap.Popover() 建構函式已建立出一個 Popover 物件出來並賦予在 examplePopover 變數上,這樣就可以針對 <a id="example"> 連結標籤點按操作。

See the Pen BootStrp 5 Popover-指定單一元素對象建構 Popover by Jimmy_Wu (@Jimmy_Wu) on CodePen.

Popover 建構後的方法操作

賦予在 examplePopover 變數上之後就成為 Popover 物件,賦予之變數後就可以進行 Popover 的相關方法進行操作,下面是透過 .show() 方法,直接在建構後做 Popover 畫面顯示,另外透過 setTimeout() 的回呼函式於三秒後直接於畫面中自動關閉 Popover。

See the Pen BootStrp 5 Popover-指定單一元素對象建構 Popover 建構後做畫面顯示於三秒後自動關閉 by Jimmy_Wu (@Jimmy_Wu) on CodePen.


Popover 客製化

在 Bootstrap 5 文件中的 用法 > 選項 > template 設定中提到,可以透過此方法客製 Popover 的 HTML 結構。

可客製樣版但有的元素還是無法插入使用,像是 <a href="#"></a> 的部份屬性如 href="#" 會無法帶出於樣版,另外還有 <button></button> 元素無法直接括入 Popover 樣版使用。

  • 在 Popover 綁定的按鈕上加上 title="Popover Title - n" 啟用 popover-header 的結構。
  • bootstrap.Popover() 實體化後,帶入第二個物件設定參數,裡面的屬性 template 使用樣版字面值處理 HTML 樣版結構。
  • HTML 樣版中除了使用 Bootstrap 的工具類樣式外,也使用 .c-popoverArrow--dark 擴充黑色 popover-header 結構的 tip 箭頭樣式。

See the Pen BootStrp 5 Popover-Popover 客製化 by Jimmy_Wu (@Jimmy_Wu) on CodePen.


補充資料

JavaScript 與 jQuery 選取元素方法

jQuery 會慢慢的不使用於各框架中,習慣了方便的使用方式,但還是需要以原生 JavaScript 寫法為主。