Оживите Bootstrap с помощью наших дополнительных плагинов JavaScript, построенных на jQuery. Узнайте о каждом плагине, наших данных и параметрах программного API и многом другом.

Индивидуальный или скомпилированный

Плагины могут быть включены индивидуально (с использованием отдельного файла Bootstrap js/dist/*.js), или все сразу, используя bootstrap.js или минифицированный bootstrap.min.js (не включайте оба).

Если Вы используете бандлер (Webpack, Rollup…), Вы можете использовать файлы /js/dist/*.js, готовые для UMD.

Зависимости

Некоторые плагины и компоненты CSS зависят от других плагинов. Если Вы включаете плагины по отдельности, обязательно проверьте наличие этих зависимостей в документации. Также обратите внимание, что все плагины зависят от jQuery (это означает, что jQuery должен быть включен перед файлами плагинов). Обратитесь к нашему package.json, чтобы узнать, какие версии jQuery поддерживаются.

Наши раскрывающиеся списки, всплывающие окна и всплывающие подсказки также зависят от Popper.js.

Атрибуты данных

Почти все плагины Bootstrap можно включить и настроить только с помощью HTML с атрибутами данных (наш предпочтительный способ использования функциональности JavaScript). Обязательно используйте только один набор атрибутов данных для одного элемента (например, Вы не можете запускать всплывающую подсказку и модальное окно с помощью одной кнопки.)

Однако в некоторых ситуациях может потребоваться отключить эту функцию. Чтобы отключить API атрибутов данных, отмените привязку всех событий к документу, имеющему пространство имен с помощью data-api, например:

$(document).off('.data-api')

В качестве альтернативы, чтобы настроить таргетинг на конкретный плагин, просто включите имя плагина в качестве пространства имен вместе с пространством имен data-api следующим образом:

$(document).off('.alert.data-api')

Селекторы

В настоящее время для запросов к элементам DOM мы используем собственные методы querySelector и querySelectorAll из соображений производительности, поэтому Вы должны использовать допустимые селекторы. Если Вы используете специальные селекторы, например: collapse:Example, не забудьте их экранировать.

События

Bootstrap предоставляет настраиваемые события для уникальных действий большинства плагинов. Как правило, они бывают в форме причастия прошедшего времени и инфинитива, где инфинитив (например, show) запускается в начале события, а его форма причастия прошедшего времени (например, shown) запускается при завершении события действие.

Все инфинитивные события обеспечивают функциональность preventDefault(). Это дает возможность остановить выполнение действия до его запуска. Возврат false от обработчика событий также автоматически вызывает preventDefault().

$('#myModal').on('show.bs.modal', function (event) {
  if (!data) {
    return event.preventDefault() // останавливает отображение модального окна
  }
})

Программный API

Мы также считаем, что у Вас должна быть возможность использовать все плагины Bootstrap исключительно через JavaScript API. Все общедоступные API-интерфейсы представляют собой единые, объединяемые в цепочки методы и возвращают коллекцию, на которую были выполнены действия.

$('.btn.danger').button('toggle').addClass('fat')

Все методы должны принимать необязательный объект параметров, строку, нацеленную на конкретный метод, или ничего (что запускает плагин с поведением по умолчанию):

$('#myModal').modal() // инициализирован по умолчанию
$('#myModal').modal({ keyboard: false }) // инициализирован без клавиатуры
$('#myModal').modal('show') // немедленно инициализирует и вызывает show

Каждый плагин также предоставляет свой необработанный конструктор Constructor в свойстве: $.fn.popover.Constructor. Если Вы хотите получить конкретный экземпляр плагина, получите его прямо из элемента: $('[rel="popover"]').data('popover').

Асинхронные функции и переходы

Все программные методы API асинхронны и возвращаются вызывающей стороне после начала перехода, но до его завершения.

Чтобы выполнить действие после завершения перехода, Вы можете прослушать соответствующее событие.

$('#myCollapse').on('shown.bs.collapse', function (event) {
  // Действие, выполняемое после раскрытия сворачиваемой области
})

Кроме того, вызов метода переходного компонента будет проигнорирован.

$('#myCarousel').on('slid.bs.carousel', function (event) {
  $('#myCarousel').carousel('2') // Перейдет к слайду 2, как только переход к слайду 1 завершится
})

$('#myCarousel').carousel('1') // Начнется переход к слайду 1 и вернется к вызывающему
$('#myCarousel').carousel('2') // !! Будет проигнорировано, так как переход к слайду 1 не завершен !!

Настройки по умолчанию

Вы можете изменить настройки плагина по умолчанию, изменив его объект Constructor.Default:

// изменяет значение по умолчанию для опции `keyboard` модального плагина на false
$.fn.modal.Constructor.Default.keyboard = false

Нет конфликта

Иногда необходимо использовать плагины Bootstrap с другими фреймворками пользовательского интерфейса. В этих обстоятельствах иногда могут возникать конфликты пространств имен. Если это произойдет, Вы можете вызвать .noConflict в плагине, значение которого Вы хотите вернуть.

var bootstrapButton = $.fn.button.noConflict() // вернуть $.fn.button к ранее присвоенному значению
$.fn.bootstrapBtn = bootstrapButton // дать $().bootstrapBtn функциональность Bootstrap

Номера версий

Доступ к версии каждого из плагинов Bootstrap jQuery можно получить через свойство VERSION конструктора плагина. Например, для плагина всплывающей подсказки:

$.fn.tooltip.Constructor.VERSION // => "4.6.1"

Никаких специальных резервных вариантов при отключенном JavaScript

Плагины Bootstrap не особенно изящно отключаются при отключенном JavaScript. Если в этом случае Вам важен опыт пользователя, используйте <noscript>, чтобы объяснить ситуацию (и как повторно включить JavaScript) для Ваших пользователей и/или добавить свои собственные резервные варианты.

Сторонние библиотеки

Bootstrap официально не поддерживает сторонние библиотеки JavaScript, такие как Prototype или jQuery UI. Несмотря на .noConflict и события в пространстве имен, могут возникнуть проблемы совместимости, которые Вам нужно исправить самостоятельно.

Util

Все файлы JavaScript в Bootstrap зависят от util.js, и он должен быть включен вместе с другими файлами JavaScript. Если Вы используете скомпилированный (или минифицированный) файл bootstrap.js, нет необходимости включать его - он уже есть.

util.js включает служебные функции и базовый помощник для событий transitionEnd, а также эмулятор перехода CSS. Он используется другими плагинами для проверки поддержки переходов CSS и для обнаружения зависших переходов.

Sanitizer

Всплывающие подсказки и всплывающие окна используют наше встроенное средство очистки для очистки параметров, принимающих HTML.

Значение по умолчанию whiteList следующее:

var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i
var DefaultWhitelist = {
  // Глобальные атрибуты разрешены для любого указанного ниже элемента.
  '*': ['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: []
}

Если Вы хотите добавить новые значения в этот белый список whiteList по умолчанию, Вы можете сделать следующее:

var myDefaultWhiteList = $.fn.tooltip.Constructor.Default.whiteList

// Разрешить элементы таблицы
myDefaultWhiteList.table = []

// Чтобы разрешить элементы td и атрибуты параметров данных в элементах td
myDefaultWhiteList.td = ['data-option']

// Вы можете отправить собственное регулярное выражение для проверки своих атрибутов.
// Будьте осторожны, чтобы Ваши регулярные выражения были слишком слабыми
var myCustomRegex = /^data-my-app-[\w-]+/
myDefaultWhiteList['*'].push(myCustomRegex)

Если Вы хотите обойти наше средство очистки, потому что предпочитаете использовать специальную библиотеку, например DOMPurify, Вам следует сделать следующее:

$('#yourTooltip').tooltip({
  sanitizeFn: function (content) {
    return DOMPurify.sanitize(content)
  }
})