์ฌ๋ฌ๋ถ, jsdom์์ Element.closest()
๋ฅผ ์ง์ํ ๊ณํ์ด ์๋์ง ๊ถ๊ธํฉ๋๋ค.
์กด์ฌํ์ง ์๋ Element.closest๋ฅผ ์ง์ํ ๊ณํ์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ Element.prototype.closest๋ ํฅํ ์ง์์ ์๋ํ ์ ์์ต๋๋ค. ํ ๋ฆฌํ์คํธ๋ ์์ผ๋ก ์์ ์ ์งํํ๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ด ๋ ๊ฒ์ ๋๋ค.
@domenic Element.prototype.closest
๋ ์์์ ๋งํฌํ ๊ฒ๊ณผ ๋ค๋ฅธ๊ฐ์? ๊ทธ ์ด์ธ์ ํด๋น MDN ๊ธฐ์ฌ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.
MDN์ด ํผ๋์ค๋ฝ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ธ๋ผ์ฐ์ (๋๋ ์ฌ์)๋ฅผ ํ์ธํ๋ฉด Element.closest === undefined
์ธ ๋ฐ๋ฉด Element.prototype.closest
๋ ํจ์์
๋๋ค.
์, ๊ทธ๋์. ์ง์ฌ์ด ์๋์์ ๊ฑฐ๋ผ ํ์ ํ์ง๋ง, ๋น์ ์ ์ด๊ธฐ ๋ฐ์์ ๊ทธ ์ฐจ์ด๋ฅผ ๋ชฐ๋ผ์ ๋ฉ์ฒญํ ์ฌ๋์ฒ๋ผ ๋๊ปด์ก๊ณ , ๊ทธ๊ฒ์ด ์ด ์ปค๋ฎค๋ํฐ๋ฅผ ๋ํํ์ง ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ๊ธฐ์ฌํ ๋งํผ ์ถฉ๋ถํ ์ดํดํ๋์ง ํ์ธํ๊ธฐ ์ํด jsdom ์ฝ๋๋ฅผ ์์ธํ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๋ถํํ๋ ์ง๊ธ์ jsdom ์ฝ๋ ๋ฒ ์ด์ค๋ฅผ ํํค์น๊ณ ์ดํดํ ์๊ฐ์ด ์์ง๋ง ๋ค์ ์ค๋ํซ๋ง ์์ผ๋ฉด ๋ฉ๋๋ค.
window.Element.prototype.closest = function (selector) {
var el = this;
while (el) {
if (el.matches(selector)) {
return el;
}
el = el.parentElement;
}
};
์ด๋ฏธ ํ๋ก์ ํธ์ ์ฐธ์ฌํ๊ณ ์๋ ๋๊ตฐ๊ฐ๊ฐ ์ ์ ํ ์์น์ ์ด๋ฅผ ๋ฃ์ ์ ์์ต๋๋ค.
๊ทธ ํ๋๊ฐ ์ด์ ํ์๋์์ผ๋ฏ๋ก https://github.com/tmpvar/jsdom/pull/1951 ์ด
์์ง jsdom์ ์์ง ์์ต๋๊น?
์ด๊ฒ์ v11.12.0์์ https://github.com/jsdom/jsdom/pull/1951 ์ ๋ณํฉํ์ฌ ์์ ๋์์ต๋๋ค ๐
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ถํํ๋ ์ง๊ธ์ jsdom ์ฝ๋ ๋ฒ ์ด์ค๋ฅผ ํํค์น๊ณ ์ดํดํ ์๊ฐ์ด ์์ง๋ง ๋ค์ ์ค๋ํซ๋ง ์์ผ๋ฉด ๋ฉ๋๋ค.
์ด๋ฏธ ํ๋ก์ ํธ์ ์ฐธ์ฌํ๊ณ ์๋ ๋๊ตฐ๊ฐ๊ฐ ์ ์ ํ ์์น์ ์ด๋ฅผ ๋ฃ์ ์ ์์ต๋๋ค.