From d620a47ce1aa07b10e3d7a1dafec23a6be383864 Mon Sep 17 00:00:00 2001 From: Alexander Nanberg Date: Fri, 21 Jul 2017 09:49:58 +0200 Subject: [PATCH 1/3] Add Element.closest polyfill --- dom.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/dom.js b/dom.js index a9c35a5..3fddd0a 100644 --- a/dom.js +++ b/dom.js @@ -501,6 +501,21 @@ } } + // Element.closest + // https://developer.mozilla.org/en-US/docs/Web/API/Element/closest + if (window.Element && !Element.prototype.closest) { + Element.prototype.closest = function(s) { + var matches = (this.document || this.ownerDocument).querySelectorAll(s), + i, + el = this; + do { + i = matches.length; + while (--i >= 0 && matches.item(i) !== el) {}; + } while ((i < 0) && (el = el.parentElement)); + return el; + }; + } + function mixin(o, ps) { if (!o) return; Object.keys(ps).forEach(function(p) { From ec9b95ad4e43be8d51f7651dcf3584628ba839bc Mon Sep 17 00:00:00 2001 From: Alexander Nanberg Date: Fri, 21 Jul 2017 10:02:52 +0200 Subject: [PATCH 2/3] Add Element.closest tests --- tests/dom_tests.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tests/dom_tests.js b/tests/dom_tests.js index 63f610a..9b3ee7b 100644 --- a/tests/dom_tests.js +++ b/tests/dom_tests.js @@ -174,6 +174,11 @@ QUnit.test("matches", function(assert) { assert.ok(document.querySelector('#baz').matches('.beta')); }); +QUnit.test("closest", function(assert) { + assert.equal(document.querySelector('#bar').closest('#foo'), document.querySelector('#foo')); + assert.equal(document.querySelector('#baz').closest('#foo'), document.querySelector('#foo')); +}); + QUnit.test('Mixin ParentNode: prepend()', function(assert) { var elem = document.querySelector('#mixin-parentnode'); var orig = elem.innerHTML; From 5a1c81edea65caed85942c9228fc1af6e38afdbe Mon Sep 17 00:00:00 2001 From: Alexander Nanberg Date: Mon, 24 Jul 2017 11:27:10 +0200 Subject: [PATCH 3/3] Add more Element.closest tests --- tests/dom_tests.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/dom_tests.js b/tests/dom_tests.js index 9b3ee7b..518a083 100644 --- a/tests/dom_tests.js +++ b/tests/dom_tests.js @@ -177,6 +177,8 @@ QUnit.test("matches", function(assert) { QUnit.test("closest", function(assert) { assert.equal(document.querySelector('#bar').closest('#foo'), document.querySelector('#foo')); assert.equal(document.querySelector('#baz').closest('#foo'), document.querySelector('#foo')); + assert.equal(document.querySelector('#foo').closest('#foo'), document.querySelector('#foo')); + assert.notOk(document.querySelector('#baz').closest('#bat')); }); QUnit.test('Mixin ParentNode: prepend()', function(assert) {