diff --git a/src/components/tooltip/helpers/bv-tooltip.js b/src/components/tooltip/helpers/bv-tooltip.js index c2e8212eca5..e33fb6b88d3 100644 --- a/src/components/tooltip/helpers/bv-tooltip.js +++ b/src/components/tooltip/helpers/bv-tooltip.js @@ -12,6 +12,7 @@ import { isDisabled, isVisible, closest, + contains, select, getById, hasClass, @@ -204,7 +205,7 @@ export const BVTooltip = /*#__PURE__*/ Vue.extend({ this.$nextTick(() => { const target = this.getTarget() - if (target && document.contains(target)) { + if (target && contains(document.body, target)) { // Copy the parent's scoped style attribute this.scopeId = getScopId(this.$parent) // Set up all trigger handlers and listeners @@ -353,7 +354,12 @@ export const BVTooltip = /*#__PURE__*/ Vue.extend({ // Show the tooltip const target = this.getTarget() - if (!target || !document.body.contains(target) || !isVisible(target) || this.dropdownOpen()) { + if ( + !target || + !contains(document.body, target) || + !isVisible(target) || + this.dropdownOpen() + ) { // If trigger element isn't in the DOM or is not visible, or is on an open dropdown toggle return } @@ -783,13 +789,13 @@ export const BVTooltip = /*#__PURE__*/ Vue.extend({ /* istanbul ignore next */ if ( // From tip to target - (tip && tip.contains(evtTarget) && target.contains(relatedTarget)) || + (tip && contains(tip, evtTarget) && contains(target, relatedTarget)) || // From target to tip - (tip && target.contains(evtTarget) && tip.contains(relatedTarget)) || + (tip && contains(target, evtTarget) && contains(tip, relatedTarget)) || // Within tip - (tip && tip.contains(evtTarget) && tip.contains(relatedTarget)) || + (tip && contains(tip, evtTarget) && contains(tip, relatedTarget)) || // Within target - (target.contains(evtTarget) && target.contains(relatedTarget)) + (contains(target, evtTarget) && contains(target, relatedTarget)) ) { // If focus/hover moves within `tip` and `target`, don't trigger a leave return