JavaScript

      用我們在jQuery上建置JavaScript插件將Bootstrap生動起來。了解每個插件、數據和API以及更多的選項。

      單個插件或集成包

      每個插件都可以被單獨引入(使用對應每個 Bootstrap 插件的 js/dist/*.js 文件),也可以通過 bootstrap.js 或壓縮版的 bootstrap.min.js 文件一次性引入所有插件(選一個即可,不要同時使用)。

      如果使用打包程序(Webpack、Rollup 等),你可以使用支持 UMD 格式的 /js/dist/*.js 文件。

      將 Bootstrap 作為模塊使用

      我們為 Bootstrap 提供了一個 ESM 模塊(bootstrap.esm.jsbootstrap.esm.min.js)的版本,如果你的目標瀏覽器支持的話,你可以在瀏覽器中將 Bootstrap 作為模塊使用。

      <script type="module">
      import { Toast } from 'bootstrap.esm.min.js'
      
      Array.from(document.querySelectorAll('.toast'))
      .forEach(toastNode => new Toast(toastNode))
      </script>
      

      不兼容的插件

      由于瀏覽器的限制,某些插件,例如下拉菜單(Dropdown)、工具提示(Tooltip)和彈出框(Popover)插件,不能通過設置為 module 類型的 <script> 標簽使用,由于它們都依賴 Popper。有關此問題的更多信息,請見 這里

      依賴項

      某些插件和 CSS 組件依賴于其它插件。如果你選擇單獨引入某個插件,請確保在文檔中檢查其是否存在依賴其它插件的情況。

      下拉菜單(dropdown)、彈出框(popover)和工具提示(tooltip)組件依賴 Popper

      仍然需要用到jQuery 嗎?有可能!

      Bootstrap 5 被設計為不依賴 jQuery,但你仍可以將 Bootstrap 的組件與 jQuery 一起使用。如果 Bootstrap 在 window 對象上檢測到了 jQuery,它將把所有的 Bootstrap 插件添加到 jQuery 的插件系統中。也就意味著你將來能夠通過 $('[data-bs-toggle="tooltip"]').tooltip()來調用工具提示組件(tooltip)。同理,其它組件也類似。

      data 屬性

      幾乎所有的 Bootstrap 插件都可以通過帶有 data 屬性的 HTML 元素單獨開啟和配置(我們推薦 JavaScript API 為首選方式)。請確保 僅在單個 HTML 元素上使用一組 data 屬性 (例如,你不能通過同一按鈕觸發工具提示和模態框。)

      選擇器

      Currently to query DOM elements we use the native methods querySelector and querySelectorAll for performance reasons, so you have to use valid selectors. If you use special selectors, for example: collapse:Example be sure to escape them. 目前,由于性能的原因,我們使用原生方法 querySelectorquerySelectorAll 來查詢 DOM 元素,因此你必須使用 合法的選擇器。 如果使用特殊的選擇器,例如collapse:Example ,請確保對其進行轉義。

      事件

      Bootstrap 為大多數插件的獨特行為提供了自定義事件。通常,事件的命名以不定式或過去分詞形式出現,例如,在事件開始時觸發的事件名時不定式形式的(例如 show),在事件完成時觸發的事件名是過去分詞形式的(例如 shown)。

      所有不定式形式命名的事件都提供 preventDefault() 功能。這就賦予了你在動作開始之前將其停止的能力。如果事件處理函數的返回值是 false,將自動調用 preventDefault()。

      var myModal = document.getElementById('myModal')
      
      myModal.addEventListener('show.bs.modal', function (event) {
      if (!data) {
      return event.preventDefault() // 停止即將展示的模態框(modal)
        }
      })
      

      jQuery 事件

      如果 jQuery 存在于 window 對象上,并且jQuery 元素上沒有設置 data-bs-no-jquery 屬性,Bootstrap 將認為 jQuery 存在。如果檢測到了 jQuery,Bootstrap 將基于 jQuery 的事件系統觸發相應的事件。因此,如果你想監聽 Bootstrap 的事件,就必須使用 jQuery 的方法(例如 .on, .one)而不能使用 addEventListener。

      $('#myTab a').on('shown.bs.tab', function () {
      // do something...
      })
      

      編程式 API

      所有構造函數都可以接受對象類型的參數或沒有參數(將以默認行為初始化插件):

      var myModalEl = document.getElementById('myModal')
      
      var modal = new bootstrap.Modal(myModalEl) //  以默認值初始化
      var modal = new bootstrap.Modal(myModalEl, { keyboard: false }) //  以對象參數初始化
      

      如果你想獲取某個插件的特定實例,可以調用每個插件都暴露出來的 getInstance 方法。為了直接從元素中獲取插件的實例對象,請執行以下操作:bootstrap.Popover.getInstance(myPopoverEl)。

      構造函數中的CSS選擇器

      您還可以使用CSS選擇器作為第一個參數,而不是DOM元素來初始化插件。目前,該插件的元素是通過querySelector方法找到的,因為我們的插件只支持單個元素。

      var modal = new bootstrap.Modal('#myModal')
      var dropdown = new bootstrap.Dropdown('[data-bs-toggle="dropdown"]')
      

      異步編程和轉換

      所有編程形式的 API 方法都是 異步的,并在 transition 開始之后、結束之前返回到調用者。 。

      為了在 transition 完成后執行某個動作,你可以監聽相應的事件。

      var myCollapseEl = document.getElementById('#myCollapse')
      
      myCollapseEl.addEventListener('shown.bs.collapse', function (event) {
      // 可折疊區域被展開時,此處的動作將被執行一次
      })
      

      另外,對正在 transitioning 狀態的組件調用的任何方法都將被忽略。

      var myCarouselEl = document.getElementById('myCarousel')
      var carousel = bootstrap.Carousel.getInstance(myCarouselEl) // 獲取輪播(Carousel)組件的實例
      
      myCarouselEl.addEventListener('slid.bs.carousel', function (event) {
      carousel.to('2') //  當滑動到幻燈片 1 之后,將立即滑動到幻燈片 2
      })
      
      carousel.to('1') // 開始滑動到幻燈片 1 并返回到回調者
      carousel.to('2') // !! 將會被忽略,因為滑動到幻燈片 1 的轉換動作還未完成 !!
      

      默認設置

      你可以通過修改插件的 Constructor.Default 對象來更改插件的默認設置:

      // 將模態框(modal)插件的 `keyboard` 的默認值修改為 false
      bootstrap.Modal.Default.keyboard = false
      

      避免沖突(僅對你使用 jQuery)

      有些時候需要將 Bootstrap 插件與其它 UI 框架一起使用。在這種情況下,難免發生命名空間的沖突。如果發生這種情況,你可以在需要還原的插件上調用 ..noConflict 函數。

      var bootstrapButton = $.fn.button.noConflict() // 重置 $.fn.button 為先前的值
      $.fn.bootstrapBtn = bootstrapButton // 為 $().bootstrapBtn 賦予 Bootstrap 的功能
      

      版本號

      每個 Bootstrap 插件都可以通過其構造函數上的 VERSION 屬性進行訪問。例如,以工具提示(tooltip)插件為例:

      bootstrap.Tooltip.VERSION // => "5.0.0-beta3"
      

      JavaScript被禁用無反饋

      當禁用JavaScript時,Bootstrap的插件不會有特別回饋。若你擔心此等情況中的使用者體驗,使用<noscript>以向你的用戶解釋此情形(以及如何重啟JavaScript的方式)和/或添加你自己定義的回饋。

      第三方工具庫

      Bootstrap 不對第三方工具庫提供支持,例如 Prototype 或 jQuery UI。盡管存在 .noConflict 和基于命名空間的事件,但仍可能需要您自行解決兼容性問題。

      清理工具

      工具提示(tooltip)和彈出框(popover)可以接受 HTML 代碼作為參數,但會使用 Bootstrap 內置的清理程序對 HTML 代碼進行清理。

      The default allowList value is the following: allowList 的默認值如下所示:

      var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i
      var DefaultAllowlist = {
      // Global attributes allowed on any supplied element below.
        '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
      a: ['target', 'href', 'title', 'rel'],
      area: [],
      b: [],
      br: [],
      col: [],
      code: [],
      div: [],
      em: [],
      hr: [],
      h1: [],
      h2: [],
      h3: [],
      h4: [],
      h5: [],
      h6: [],
      i: [],
      img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],
      li: [],
      ol: [],
      p: [],
      pre: [],
      s: [],
      small: [],
      span: [],
      sub: [],
      sup: [],
      strong: [],
      u: [],
      ul: []
      }
      

      如果要向 allowList 添加新值,則可以執行如下操作:

      var myDefaultAllowList = bootstrap.Tooltip.Default.allowList
      
      // 添加 table 元素
      myDefaultAllowList.table = []
      
      // 添加 td 元素以及 td 元素的 data-bs-option 屬性
      myDefaultAllowList.td = ['data-bs-option']
      
      // 你可以添加自定義的正則表達式來對屬性進行校驗。
      // 請提防過于寬松的正則表達式
      var myCustomRegex = /^data-my-app-[\w-]+/
      myDefaultAllowList['*'].push(myCustomRegex)
      

      如果你因為喜歡使用專用的工具庫(例如 DOMPurify)并想繞過 Bootstrap 的清理程序,則可以這樣操作:

      var yourTooltipEl = document.getElementById('yourTooltip')
      var tooltip = new bootstrap.Tooltip(yourTooltipEl, {
      sanitizeFn: function (content) {
      return DOMPurify.sanitize(content)
      }
      })
      
      返回頂部
      主站蜘蛛池模板: 亚洲午夜电影一区二区三区 | 国产精品被窝福利一区 | 一色一伦一区二区三区| 国产亚洲情侣一区二区无码AV| 日本一区二区三区久久| 夜夜爽一区二区三区精品| 亚洲欧美日韩一区二区三区| 日本一区二区在线播放| 亚洲av片一区二区三区| 最新中文字幕一区| 亚欧在线精品免费观看一区| 国精品无码A区一区二区| 国模极品一区二区三区| 亚洲日本久久一区二区va | 天堂Aⅴ无码一区二区三区| 蜜臀AV在线播放一区二区三区| 国产A∨国片精品一区二区| 无码国产精品一区二区免费式影视| 熟女少妇精品一区二区| 四虎永久在线精品免费一区二区| 国产麻豆媒一区一区二区三区| 亚洲精品色播一区二区| 一本一道波多野结衣一区| 亚洲一区二区三区在线网站| 精品一区二区三区在线播放视频 | 国产丝袜美女一区二区三区| 一区二区精品视频| 日本夜爽爽一区二区三区| 国产天堂在线一区二区三区 | 亚洲国产美国国产综合一区二区 | 精品无码一区二区三区在线| 色窝窝无码一区二区三区色欲| 中文字幕一区二区在线播放| 成人区人妻精品一区二区不卡网站 | 无码人妻久久一区二区三区免费丨| 久久精品免费一区二区| 在线视频亚洲一区| а天堂中文最新一区二区三区| 精品国产一区二区三区2021| 欧洲精品无码一区二区三区在线播放| 国产在线无码一区二区三区视频|