JavaScript
Da vida a Bootstrap cos nosos complementos de JavaScript opcionais construídos en jQuery. Obtén información sobre cada complemento, as nosas opcións de datos e API programáticas e moito máis.
Individual ou compilado
Os complementos poden incluírse individualmente (usando o individual de Bootstrap js/dist/*.js
), ou todos á vez usando bootstrap.js
ou minificados bootstrap.min.js
(non inclúa ambos).
Se usas un paquete de paquetes (Webpack, Rollup...), podes usar /js/dist/*.js
ficheiros que estean preparados para UMD.
Dependencias
Algúns complementos e compoñentes CSS dependen doutros complementos. Se inclúes complementos individualmente, asegúrate de comprobar estas dependencias nos documentos. Teña en conta tamén que todos os complementos dependen de jQuery (isto significa que jQuery debe incluírse antes dos ficheiros de complementos). Consulte o nosopackage.json
para ver que versións de jQuery son compatibles.
Os nosos menús despregables, popovers e informacións sobre ferramentas tamén dependen de Popper.js .
Atributos de datos
Case todos os complementos de Bootstrap pódense activar e configurar só mediante HTML con atributos de datos (a nosa forma preferida de usar a funcionalidade de JavaScript). Asegúrate de usar só un conxunto de atributos de datos nun único elemento (por exemplo, non podes activar unha información sobre ferramentas e un modal desde o mesmo botón).
Non obstante, nalgunhas situacións pode ser desexable desactivar esta función. Para desactivar a API do atributo de datos, desvincule todos os eventos do documento espaciados de nomes deste data-api
xeito:
$(document).off('.data-api')
Alternativamente, para apuntar a un complemento específico, simplemente inclúa o nome do complemento como espazo de nomes xunto co espazo de nomes da API de datos como este:
$(document).off('.alert.data-api')
Selectores
Actualmente para consultar elementos DOM usamos os métodos nativos querySelector
e querySelectorAll
por razóns de rendemento, polo que tes que usar selectores válidos . Se usas selectores especiais, por exemplo: collapse:Example
asegúrate de escapar deles.
Eventos
Bootstrap ofrece eventos personalizados para as accións únicas da maioría dos complementos. Xeralmente, estes veñen nunha forma de infinitivo e de participio pasado, onde o infinitivo (ex. show
) se activa ao comezo dun evento, e a súa forma de participio pasado (ex. shown
) desenvólvese ao completar unha acción.
Todos os eventos de infinitivo proporcionan preventDefault()
funcionalidade. Isto proporciona a capacidade de deter a execución dunha acción antes de que comece. Devolver false desde un controlador de eventos tamén chamará automaticamente a preventDefault()
.
$('#myModal').on('show.bs.modal', function (event) {
if (!data) {
return event.preventDefault() // stops modal from being shown
}
})
API programática
Tamén cremos que deberías poder usar todos os complementos de Bootstrap só a través da API de JavaScript. Todas as API públicas son métodos únicos que se poden encadear e devolven a colección sobre a que se actuou.
$('.btn.danger').button('toggle').addClass('fat')
Todos os métodos deben aceptar un obxecto de opcións opcionais, unha cadea que se dirixe a un método en particular ou nada (que inicia un complemento co comportamento predeterminado):
$('#myModal').modal() // initialized with defaults
$('#myModal').modal({ keyboard: false }) // initialized with no keyboard
$('#myModal').modal('show') // initializes and invokes show immediately
Cada complemento tamén expón o seu construtor bruto nunha Constructor
propiedade: $.fn.popover.Constructor
. Se queres obter unha instancia de complemento en particular, obtén directamente desde un elemento: $('[rel="popover"]').data('popover')
.
Funcións asíncronas e transicións
Todos os métodos de API programáticas son asíncronos e volven ao interlocutor unha vez iniciada a transición pero antes de que remate .
Para executar unha acción unha vez completada a transición, podes escoitar o evento correspondente.
$('#myCollapse').on('shown.bs.collapse', function (event) {
// Action to execute once the collapsible area is expanded
})
Ademais , ignorarase unha chamada de método nun compoñente en transición .
$('#myCarousel').on('slid.bs.carousel', function (event) {
$('#myCarousel').carousel('2') // Will slide to the slide 2 as soon as the transition to slide 1 is finished
})
$('#myCarousel').carousel('1') // Will start sliding to the slide 1 and returns to the caller
$('#myCarousel').carousel('2') // !! Will be ignored, as the transition to the slide 1 is not finished !!
Configuración predeterminada
Podes cambiar a configuración predeterminada dun complemento modificando o Constructor.Default
obxecto do complemento:
// changes default for the modal plugin's `keyboard` option to false
$.fn.modal.Constructor.Default.keyboard = false
Sen conflito
Ás veces é necesario usar complementos de Bootstrap con outros marcos de IU. Nestas circunstancias, ocasionalmente poden ocorrer colisións de espazos de nomes. Se isto ocorre, podes chamar .noConflict
ao complemento do que desexas reverter o valor.
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
Pódese acceder á versión de cada un dos complementos jQuery de Bootstrap a través da VERSION
propiedade do construtor do complemento. Por exemplo, para o complemento de información sobre ferramentas:
$.fn.tooltip.Constructor.VERSION // => "4.6.2"
Non hai opcións especiais cando JavaScript está desactivado
Os complementos de Bootstrap non caen con especial gracia cando JavaScript está desactivado. Se che importa a experiencia do usuario neste caso, úsao <noscript>
para explicar a situación (e como volver activar JavaScript) aos teus usuarios e/ou engade as túas propias opcións de reserva personalizadas.
Bibliotecas de terceiros
Bootstrap non admite oficialmente bibliotecas JavaScript de terceiros como Prototype ou jQuery UI. A pesar .noConflict
dos eventos separados dos nomes, pode haber problemas de compatibilidade que teñas que solucionar por ti mesmo.
Util
Todos os ficheiros JavaScript de Bootstrap dependen util.js
e deben incluírse xunto cos outros ficheiros JavaScript. Se estás a usar o compilado (ou minificado) bootstrap.js
, non hai que incluír isto, xa está aí.
util.js
inclúe funcións de utilidade e un axudante básico para transitionEnd
eventos, así como un emulador de transición CSS. Úsano os outros complementos para comprobar a compatibilidade de transición CSS e capturar as transicións pendentes.
Sanitizante
As informacións sobre ferramentas e popovers usan o noso desinfectante integrado para desinfectar as opcións que aceptan HTML.
O valor predeterminado whiteList
é o seguinte:
var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i
var DefaultWhitelist = {
// 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: []
}
Se queres engadir novos valores a este valor predeterminado whiteList
, podes facer o seguinte:
var myDefaultWhiteList = $.fn.tooltip.Constructor.Default.whiteList
// To allow table elements
myDefaultWhiteList.table = []
// To allow td elements and data-option attributes on td elements
myDefaultWhiteList.td = ['data-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-]+/
myDefaultWhiteList['*'].push(myCustomRegex)
Se queres evitar o noso desinfectante porque prefires usar unha biblioteca dedicada, por exemplo DOMPurify , debes facer o seguinte:
$('#yourTooltip').tooltip({
sanitizeFn: function (content) {
return DOMPurify.sanitize(content)
}
})