diff --git a/js/src/collapse.js b/js/src/collapse.js
index 838eea4d1c678f1b1642baf9cc982e8bacbd51e7..9c2773754ccb6320904fb0c9bccdad69e15ad925 100644
--- a/js/src/collapse.js
+++ b/js/src/collapse.js
@@ -74,11 +74,11 @@ class Collapse {
       `[data-toggle="collapse"][data-target="#${element.id}"]`
     ))
 
-    const toggleList = Util.makeArray(document.querySelectorAll(Selector.DATA_TOGGLE))
+    const toggleList = Util.makeArray(SelectorEngine.find(Selector.DATA_TOGGLE))
     for (let i = 0, len = toggleList.length; i < len; i++) {
       const elem = toggleList[i]
       const selector = Util.getSelectorFromElement(elem)
-      const filterElement = Util.makeArray(document.querySelectorAll(selector))
+      const filterElement = Util.makeArray(SelectorEngine.find(selector))
         .filter((foundElem) => foundElem === element)
 
       if (selector !== null && filterElement.length) {
@@ -130,7 +130,7 @@ class Collapse {
     let activesData
 
     if (this._parent) {
-      actives = Util.makeArray(this._parent.querySelectorAll(Selector.ACTIVES))
+      actives = Util.makeArray(SelectorEngine.find(Selector.ACTIVES, this._parent))
         .filter((elem) => {
           if (typeof this._config.parent === 'string') {
             return elem.getAttribute('data-parent') === this._config.parent
@@ -343,7 +343,7 @@ class Collapse {
 
   static _getTargetFromElement(element) {
     const selector = Util.getSelectorFromElement(element)
-    return selector ? document.querySelector(selector) : null
+    return selector ? SelectorEngine.findOne(selector) : null
   }
 
   static _collapseInterface(element, config) {
diff --git a/js/src/dropdown.js b/js/src/dropdown.js
index 2b517266ce82dde8ccbc4f25dce390dab3741ebd..46aff8f884d84abf9b8750e9b565b2ab959ce632 100644
--- a/js/src/dropdown.js
+++ b/js/src/dropdown.js
@@ -152,7 +152,7 @@ class Dropdown {
        * Popper - https://popper.js.org
        */
       if (typeof Popper === 'undefined') {
-        throw new TypeError('Bootstrap\'s dropdowns require Popper.js (https://popper.js.org/)')
+        throw new TypeError('Bootstrap\'s dropdowns require Popper.js (https://popper.js.org)')
       }
 
       let referenceElement = this._element
@@ -286,7 +286,7 @@ class Dropdown {
       const parent = Dropdown._getParentFromElement(this._element)
 
       if (parent) {
-        this._menu = parent.querySelector(Selector.MENU)
+        this._menu = SelectorEngine.findOne(Selector.MENU, parent)
       }
     }
     return this._menu
@@ -442,7 +442,7 @@ class Dropdown {
     const selector = Util.getSelectorFromElement(element)
 
     if (selector) {
-      parent = document.querySelector(selector)
+      parent = SelectorEngine.findOne(selector)
     }
 
     return parent || element.parentNode
@@ -482,7 +482,7 @@ class Dropdown {
       return
     }
 
-    const items = Util.makeArray(parent.querySelectorAll(Selector.VISIBLE_ITEMS))
+    const items = Util.makeArray(SelectorEngine.find(Selector.VISIBLE_ITEMS, parent))
 
     if (!items.length) {
       return
diff --git a/js/src/modal.js b/js/src/modal.js
index 69b77009d19ef857ab0cee1c329ab387fd4970d5..0897b317ab61a98bb6df0c9ce31a0f669d9bd4a3 100644
--- a/js/src/modal.js
+++ b/js/src/modal.js
@@ -246,7 +246,7 @@ class Modal {
     this._element.setAttribute('aria-modal', true)
 
     if (this._dialog.classList.contains(ClassName.SCROLLABLE)) {
-      this._dialog.querySelector(Selector.MODAL_BODY).scrollTop = 0
+      SelectorEngine.findOne(Selector.MODAL_BODY, this._dialog).scrollTop = 0
     } else {
       this._element.scrollTop = 0
     }
diff --git a/js/src/scrollspy.js b/js/src/scrollspy.js
index f317284c9c5c23ffd6444ddd7e8d64297a1cf251..f5d1008af78d5bebc8a0c1269a404a41faed73e5 100644
--- a/js/src/scrollspy.js
+++ b/js/src/scrollspy.js
@@ -118,7 +118,7 @@ class ScrollSpy {
 
     this._scrollHeight = this._getScrollHeight()
 
-    const targets = Util.makeArray(document.querySelectorAll(this._selector))
+    const targets = Util.makeArray(SelectorEngine.find(this._selector))
 
     targets
       .map((element) => {
@@ -126,7 +126,7 @@ class ScrollSpy {
         const targetSelector = Util.getSelectorFromElement(element)
 
         if (targetSelector) {
-          target = document.querySelector(targetSelector)
+          target = SelectorEngine.findOne(targetSelector)
         }
 
         if (target) {
@@ -284,7 +284,7 @@ class ScrollSpy {
   }
 
   _clear() {
-    Util.makeArray(document.querySelectorAll(this._selector))
+    Util.makeArray(SelectorEngine.find(this._selector))
       .filter((node) => node.classList.contains(ClassName.ACTIVE))
       .forEach((node) => node.classList.remove(ClassName.ACTIVE))
   }
diff --git a/js/src/tab.js b/js/src/tab.js
index 121669aad522079585e240b977473d7a7217ae59..dab38c51c9c6cf79a59efbe4a187bc62d8a27781 100644
--- a/js/src/tab.js
+++ b/js/src/tab.js
@@ -106,7 +106,7 @@ class Tab {
     }
 
     if (selector) {
-      target = document.querySelector(selector)
+      target = SelectorEngine.findOne(selector)
     }
 
     this._activate(
@@ -193,7 +193,7 @@ class Tab {
       const dropdownElement = SelectorEngine.closest(element, Selector.DROPDOWN)
 
       if (dropdownElement) {
-        Util.makeArray(dropdownElement.querySelectorAll(Selector.DROPDOWN_TOGGLE))
+        Util.makeArray(SelectorEngine.find(Selector.DROPDOWN_TOGGLE))
           .forEach((dropdown) => dropdown.classList.add(ClassName.ACTIVE))
       }