aboutsummaryrefslogtreecommitdiff
path: root/js/src
diff options
context:
space:
mode:
authorMartijn Cuppens <[email protected]>2020-03-09 16:21:04 +0100
committerGitHub <[email protected]>2020-03-09 17:21:04 +0200
commit7d8c7c4ba844f3e70b7cda20a5b813b54e43959d (patch)
tree92866d65495021a2c1aa32e2ddf9da19af3bea0f /js/src
parent14c4a601fe09cf6f711dffbb9240c4c8abc25767 (diff)
downloadbootstrap-7d8c7c4ba844f3e70b7cda20a5b813b54e43959d.tar.xz
bootstrap-7d8c7c4ba844f3e70b7cda20a5b813b54e43959d.zip
`prev()` function fails when non-element nodes are present (#30117)
The `prev()` function doesn't take nodes other than elements into account. Also we could simplify things a lot using the `previousElementSibling` property. This property isn't fully supported in IE, it only works for elements, but since the `element` variable is an element, we can safely use it here. I've also added an additional test. I don't think we had this issue in v4, since we relied on jQuery back then. Ref. https://developer.mozilla.org/en-US/docs/Web/API/NonDocumentTypeChildNode/nextElementSibling
Diffstat (limited to 'js/src')
-rw-r--r--js/src/dom/selector-engine.js12
1 files changed, 5 insertions, 7 deletions
diff --git a/js/src/dom/selector-engine.js b/js/src/dom/selector-engine.js
index d66d8acfc..c9d25f68c 100644
--- a/js/src/dom/selector-engine.js
+++ b/js/src/dom/selector-engine.js
@@ -56,19 +56,17 @@ const SelectorEngine = {
},
prev(element, selector) {
- const siblings = []
+ let previous = element.previousElementSibling
- let previous = element.previousSibling
-
- while (previous && previous.nodeType === Node.ELEMENT_NODE && previous.nodeType !== NODE_TEXT) {
+ while (previous) {
if (this.matches(previous, selector)) {
- siblings.push(previous)
+ return [previous]
}
- previous = previous.previousSibling
+ previous = previous.previousElementSibling
}
- return siblings
+ return []
}
}