JavaScript
Da vida a Bootstrap con nuestros plugins opcionales de JavaScript. Conoce cada plugin, nuestras opciones de API data y programática, y más.
Individual o compilado
Los plugins pueden incluirse individualmente (usando los js/dist/*.js
individuales de Bootstrap), o todos a la vez usando bootstrap.js o el minificado
bootstrap.min.js (no incluyas ambos).
Si usas un bundler (Webpack, Rollup…), puedes usar los archivos /js/dist/*.js
que son compatibles con UMD.
Usar Bootstrap como módulo
Proporcionamos una versión de Bootstrap construida como ESM
(bootstrap.esm.js y bootstrap.esm.min.js) que te permite usar Bootstrap como módulo
en tu navegador, si tus navegadores objetivo lo soportan.
<script type="module">
import { Toast } from 'bootstrap.esm.min.js'
Array.from(document.querySelectorAll('.toast'))
.forEach(toastNode => new Toast(toastNode))
</script>
Plugins incompatibles
Debido a limitaciones del navegador, algunos de nuestros plugins, concretamente los
plugins Dropdown, Tooltip y Popover, no pueden usarse en una etiqueta <script> con tipo
module porque dependen de Popper. Para más información sobre el problema consulta aquí.
Dependencias
Algunos plugins y componentes CSS dependen de otros plugins. Si incluyes plugins individualmente, asegúrate de comprobar estas dependencias en la documentación.
Nuestros desplegables, popovers y tooltips también dependen de Popper.
¿Aún quieres usar jQuery? ¡Es posible!
Bootstrap 5 está diseñado para usarse sin jQuery, pero sigue siendo posible usar nuestros
componentes con jQuery. Si Bootstrap detecta jQuery en el objeto
window añadirá todos nuestros componentes al sistema de plugins de jQuery; esto
significa que podrás hacer $('[data-bs-toggle="tooltip"]').tooltip() para activar los tooltips.
Lo mismo aplica para nuestros otros componentes.
Atributos data
Casi todos los plugins de Bootstrap pueden activarse y configurarse a través de HTML únicamente con atributos data (nuestra forma preferida de usar la funcionalidad JavaScript). Asegúrate de usar solo un conjunto de atributos data en un solo elemento (ej., no puedes activar un tooltip y un modal desde el mismo botón).
Selectores
Actualmente, para consultar elementos del DOM usamos los métodos nativos
querySelector y querySelectorAll por razones de rendimiento, así que tienes que
usar selectores válidos.
Si usas selectores especiales, por ejemplo: collapse:Example asegúrate de escaparlos.
Eventos
Bootstrap proporciona eventos personalizados para las acciones únicas de la mayoría de los
plugins. Generalmente, estos vienen en forma infinitiva y de participio pasado - donde el infinitivo (ej.
show) se dispara al inicio de un evento, y su forma de participio pasado (ej. shown)
se dispara al completar una acción.
Todos los eventos infinitivos proporcionan la funcionalidad preventDefault().
Esto da la capacidad de detener la ejecución de una acción antes de que comience. Devolver false desde un
manejador de eventos también llamará automáticamente a preventDefault().
var myModal = document.getElementById('myModal')
myModal.addEventListener('show.bs.modal', function (event) {
if (!data) {
return event.preventDefault() // stops modal from being shown
}
})
Eventos de jQuery
Bootstrap detectará jQuery si jQuery está presente en el objeto
window y no hay un atributo data-bs-no-jquery establecido en el
<body>. Si se encuentra jQuery, Bootstrap emitirá eventos gracias al sistema de eventos
de jQuery. Así que si quieres escuchar los eventos de Bootstrap, tendrás que usar los métodos de jQuery
(.on, .one) en lugar de addEventListener.
$('#myTab a').on('shown.bs.tab', function () {
// do something...
})
API programática
Todos los constructores aceptan un objeto de opciones opcional o nada (lo cual inicia un plugin con su comportamiento predeterminado):
var myModalEl = document.getElementById('myModal')
var modal = new bootstrap.Modal(myModalEl) // initialized with defaults
var modal = new bootstrap.Modal(myModalEl, { keyboard: false }) // initialized with no keyboard
Si quieres obtener una instancia particular de un plugin, cada plugin expone un método
getInstance. Para recuperarla directamente desde un elemento, haz esto:
bootstrap.Popover.getInstance(myPopoverEl).
Selectores CSS en constructores
También puedes usar un selector CSS como primer argumento en lugar de un elemento del DOM
para inicializar el plugin. Actualmente el elemento para el plugin se encuentra mediante el método
querySelector ya que nuestros plugins soportan un solo elemento únicamente.
var modal = new bootstrap.Modal('#myModal')
var dropdown = new bootstrap.Dropdown('[data-bs-toggle="dropdown"]')
Funciones asíncronas y transiciones
Todos los métodos de la API programática son asíncronos y devuelven al llamador una vez que la transición ha comenzado pero antes de que termine.
Para ejecutar una acción una vez que la transición se haya completado, puedes escuchar el evento correspondiente.
var myCollapseEl = document.getElementById('myCollapse')
myCollapseEl.addEventListener('shown.bs.collapse', function (event) {
// Action to execute once the collapsible area is expanded
})
Además, una llamada a un método en un componente en transición será ignorada.
var myCarouselEl = document.getElementById('myCarousel')
var carousel = bootstrap.Carousel.getInstance(myCarouselEl) // Retrieve a Carousel instance
myCarouselEl.addEventListener('slid.bs.carousel', function (event) {
carousel.to('2') // Will slide to the slide 2 as soon as the transition to slide 1 is finished
})
carousel.to('1') // Will start sliding to the slide 1 and returns to the caller
carousel.to('2') // !! Will be ignored, as the transition to the slide 1 is not finished !!
Configuración predeterminada
Puedes cambiar la configuración predeterminada de un plugin modificando el objeto
Constructor.Default del plugin:
// changes default for the modal plugin's `keyboard` option to false
bootstrap.Modal.Default.keyboard = false
Sin conflicto (solo si usas jQuery)
A veces es necesario usar los plugins de Bootstrap con otros frameworks de UI. En estas
circunstancias, pueden ocurrir ocasionalmente colisiones de namespace. Si esto ocurre, puedes llamar a
.noConflict en el plugin cuyo valor quieras revertir.
var bootstrapButton = $.fn.button.noConflict() // return $.fn.button to previously assigned value
$.fn.bootstrapBtn = bootstrapButton // give $().bootstrapBtn the Bootstrap functionality
Números de versión
La versión de cada uno de los plugins de Bootstrap puede accederse a través de la propiedad
VERSION del constructor del plugin. Por ejemplo, para el plugin tooltip:
bootstrap.Tooltip.VERSION // => "5.0.2"
Sin fallbacks especiales cuando JavaScript está desactivado
Los plugins de Bootstrap no tienen un fallback particularmente elegante cuando JavaScript
está desactivado. Si te importa la experiencia del usuario en este caso, usa <noscript>
para explicar la situación (y cómo reactivar JavaScript) a tus usuarios, y/o añade tus propios fallbacks
personalizados.
Librerías de terceros
Bootstrap no soporta oficialmente librerías de JavaScript de terceros
como Prototype o jQuery UI. A pesar de .noConflict y los eventos con namespace, puede haber
problemas de compatibilidad que necesites solucionar por tu cuenta.
Sanitizer
Los Tooltips y Popovers usan nuestro sanitizer integrado para sanitizar las opciones que aceptan HTML.
El valor predeterminado de allowList es el siguiente:
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: []
}
Si quieres añadir nuevos valores a este allowList predeterminado puedes hacer
lo siguiente:
var myDefaultAllowList = bootstrap.Tooltip.Default.allowList
// To allow table elements
myDefaultAllowList.table = []
// To allow td elements and data-bs-option attributes on td elements
myDefaultAllowList.td = ['data-bs-option']
// You can push your custom regex to validate your attributes.
// Be careful about your regular expressions being too lax
var myCustomRegex = /^data-my-app-[\w-]+/
myDefaultAllowList['*'].push(myCustomRegex)
Si quieres omitir nuestro sanitizer porque prefieres usar una librería dedicada, por ejemplo DOMPurify, deberías hacer lo siguiente:
var yourTooltipEl = document.getElementById('yourTooltip')
var tooltip = new bootstrap.Tooltip(yourTooltipEl, {
sanitizeFn: function (content) {
return DOMPurify.sanitize(content)
}
})