9
|
1 |
// element-closest | CC0-1.0 | github.com/jonathantneal/closest |
|
2 |
|
|
3 |
(function (ElementProto) { |
|
4 |
if (typeof ElementProto.matches !== 'function') { |
|
5 |
ElementProto.matches = ElementProto.msMatchesSelector || ElementProto.mozMatchesSelector || ElementProto.webkitMatchesSelector || function matches(selector) { |
|
6 |
var element = this; |
|
7 |
var elements = (element.document || element.ownerDocument).querySelectorAll(selector); |
|
8 |
var index = 0; |
|
9 |
|
|
10 |
while (elements[index] && elements[index] !== element) { |
|
11 |
++index; |
|
12 |
} |
|
13 |
|
|
14 |
return Boolean(elements[index]); |
|
15 |
}; |
|
16 |
} |
|
17 |
|
|
18 |
if (typeof ElementProto.closest !== 'function') { |
|
19 |
ElementProto.closest = function closest(selector) { |
|
20 |
var element = this; |
|
21 |
|
|
22 |
while (element && element.nodeType === 1) { |
|
23 |
if (element.matches(selector)) { |
|
24 |
return element; |
|
25 |
} |
|
26 |
|
|
27 |
element = element.parentNode; |
|
28 |
} |
|
29 |
|
|
30 |
return null; |
|
31 |
}; |
|
32 |
} |
|
33 |
})(window.Element.prototype); |