Tooltips and popovers show extra information when you hover or click on something. They help users understand parts of a page without cluttering it.
Tooltip and popover initialization in Bootsrap
var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]')); var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) { return new bootstrap.Tooltip(tooltipTriggerEl); }); var popoverTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="popover"]')); var popoverList = popoverTriggerList.map(function (popoverTriggerEl) { return new bootstrap.Popover(popoverTriggerEl); });
Use data-bs-toggle="tooltip" or data-bs-toggle="popover" on elements to mark them for initialization.
Initialization code activates the tooltips or popovers so they work when users interact.
<button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" title="Tooltip text">Hover me</button>
<a href="#" data-bs-toggle="popover" title="Popover title" data-bs-content="More info here">Click me</a>
var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]')); var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) { return new bootstrap.Tooltip(tooltipTriggerEl); });
var popoverTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="popover"]')); var popoverList = popoverTriggerList.map(function (popoverTriggerEl) { return new bootstrap.Popover(popoverTriggerEl); });
This page has two buttons. The first shows a tooltip when hovered. The second shows a popover with a title and content when clicked. The JavaScript activates both features.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <title>Tooltip and Popover Example</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet" /> </head> <body> <main class="p-4"> <button type="button" class="btn btn-primary me-3" data-bs-toggle="tooltip" title="Save your work"> Save </button> <button type="button" class="btn btn-info" data-bs-toggle="popover" title="More info" data-bs-content="Click here to get detailed help."> Help </button> </main> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script> <script> var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]')); var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) { return new bootstrap.Tooltip(tooltipTriggerEl); }); var popoverTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="popover"]')); var popoverList = popoverTriggerList.map(function (popoverTriggerEl) { return new bootstrap.Popover(popoverTriggerEl); }); </script> </body> </html>
Tooltips appear on hover or focus, popovers appear on click by default.
Make sure to include Bootstrap's CSS and JS files for tooltips and popovers to work.
Use descriptive text in tooltips and popovers for better accessibility.
Tooltips and popovers show extra info on hover or click.
Add data-bs-toggle attributes to elements to mark them.
Use JavaScript to activate tooltips and popovers on the page.
Practice
data-bs-toggle="tooltip" to an HTML element in Bootstrap?Solution
Step 1: Understand the role of
The attributedata-bs-toggledata-bs-toggle="tooltip"tells Bootstrap this element should show a tooltip when hovered or focused.Step 2: Differentiate tooltip from other components
Unlike modals or popovers, tooltips show small text on hover/focus, not on click or page load.Final Answer:
To mark the element so Bootstrap can show a tooltip on hover or focus -> Option AQuick Check:
Tooltip attribute means show tooltip on hover/focus [OK]
- Confusing tooltip with popover or modal
- Thinking it triggers on click instead of hover/focus
- Assuming it disables styles
Solution
Step 1: Identify correct Bootstrap tooltip initialization syntax
Bootstrap requires selecting elements withdata-bs-toggle="tooltip"and creating newbootstrap.Tooltipinstances for each.Step 2: Check each option for correct syntax and selectors
var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]')); var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) { return new bootstrap.Tooltip(tooltipTriggerEl); }); uses correct selector and method. Options B, C, and D use invalid methods or selectors.Final Answer:
var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]')); var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) { return new bootstrap.Tooltip(tooltipTriggerEl); }); -> Option DQuick Check:
Correct selector and new bootstrap.Tooltip() call = A [OK]
- Using wrong attribute selector like data-toggle instead of data-bs-toggle
- Calling non-existent methods like initialize()
- Not creating Tooltip instances for each element
<button type="button" class="btn btn-secondary" data-bs-toggle="popover" data-bs-content="Hello!">Click me</button>
<script>
var popoverTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="popover"]'));
var popoverList = popoverTriggerList.map(function (popoverTriggerEl) {
return new bootstrap.Popover(popoverTriggerEl);
});
</script>Solution
Step 1: Understand popover default trigger behavior
Bootstrap popovers by default show on click, not hover.Step 2: Check the HTML and JS setup
The button hasdata-bs-toggle="popover"anddata-bs-content="Hello!". The JS initializes popovers on all such elements.Final Answer:
A popover with text 'Hello!' appears when the button is clicked -> Option AQuick Check:
Popover default trigger is click, so popover shows on click [OK]
- Thinking popovers show on hover like tooltips
- Assuming data-bs-content is invalid
- Expecting popover without JS initialization
<button data-bs-toggle="tooltip" title="Tooltip text">Hover me</button>
<script>
var tooltipTriggerList = document.querySelectorAll('[data-bs-toggle="tooltip"]');
var tooltipList = tooltipTriggerList.map(function (el) {
return new bootstrap.Tooltip(el);
});
</script>Solution
Step 1: Check the type returned by querySelectorAll
querySelectorAll returns a NodeList, which does not have the map() method.Step 2: Identify how to fix the error
Convert NodeList to array using Array.from() or [].slice.call() before calling map.Final Answer:
querySelectorAll returns a NodeList, which does not have map method -> Option BQuick Check:
NodeList lacks map(), convert to array first [OK]
- Using data-toggle instead of data-bs-toggle in Bootstrap 5
- Thinking title attribute is invalid for tooltips
- Assuming bootstrap.Tooltip.init() exists
Solution
Step 1: Understand the need to initialize tooltips and popovers separately
Tooltips and popovers require different Bootstrap classes to be instantiated.Step 2: Check which code correctly initializes each element based on its attribute
const triggers = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"], [data-bs-toggle="popover"]')); triggers.forEach(el => { if(el.getAttribute('data-bs-toggle') === 'tooltip') new bootstrap.Tooltip(el); else if(el.getAttribute('data-bs-toggle') === 'popover') new bootstrap.Popover(el); }); selects all elements with either tooltip or popover toggle, then creates the correct instance per element.Step 3: Identify errors in other options
new bootstrap.Tooltip(document.querySelectorAll('[data-bs-toggle="tooltip"]')); new bootstrap.Popover(document.querySelectorAll('[data-bs-toggle="popover"]')); tries to pass NodeList directly to constructor (invalid). bootstrap.initAllTooltipsAndPopovers(); calls a non-existent method. document.querySelectorAll('[data-bs-toggle]').forEach(el => new bootstrap.Tooltip(el)); initializes all as tooltips, ignoring popovers.Final Answer:
const triggers = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"], [data-bs-toggle="popover"]')); triggers.forEach(el => { if(el.getAttribute('data-bs-toggle') === 'tooltip') new bootstrap.Tooltip(el); else if(el.getAttribute('data-bs-toggle') === 'popover') new bootstrap.Popover(el); }); -> Option CQuick Check:
Check attribute inside loop to create correct instance [OK]
- Passing NodeList directly to constructor
- Calling non-existent Bootstrap methods
- Initializing all as tooltips ignoring popovers
Ready to prove it?
Pass the test and this pattern moves unknown
