在取得 Dom 時我們常常會用到 `document.querySelector()` 用來取得向下的子元件。有時候我們也會可能需要向上取得母系元件,這時候我們就需要用到 `closest()` 了。
### 用法
在使用 `closest()` 時我們需要由一個 Dom 出發,例如有以下這個 html :
```html
<div id='div1'>
<div id='div2'>
<div id='div3'></div>
<div id='div4'></div>
</div>
<div id='div5'></div>
</div>
```
我們先用 `querySelector()` 取得 `#div3` 這個 Element 先 :
```js
const div3 = document.querySelector('#div3');
```
如果需要由 `#div3` 出發,使用 `closest()` 取得 `#div1` 的話,可以這樣 :
```js
const div3 = document.querySelector('#div3');
const div1 = div3.closest('#div1');
```
那麼問大家一個問題,如果使用以下的語法會取得那一個 `div` 呢?
```js
// 問題 1
div3.closest('div');
// 問題 2
div3.closest('div div');
```
答案時間,問題 1 的答案是 `#div3` 自已本身,而問題 2 的答案也是 `#div3` 自已本身 !
因為 `closest()` 在搜索時也會包含自己在內,這點一定要注意。
### 使用 `closest()` 但是排除自己
如果我們只想要向上取得 Element 就先需要排除自身 Element 在外,可以通過以下方法達成 :
```js
// 取得 div3
const div3 = document.querySelector('#div3');
// 通過使用 parentNode 來向上取得 parent,再在 parent 上使用 closest() 就可以了
const div2 = div3.parentNode.closest('div');
```