跳到主要内容

在事件委托中获取元素数据

通常在遍历列表时会利用事件委托优化列表点击,将列表的点击事件委托到父元素上.

比如有这么一个列表:

const list = [
{ id: 1, text: '内容1' },
{ id: 2, text: '内容2' },
{ id: 3, text: '内容2' },
]
<div>
<ul class="ul" @click="handelLiClick">
<li v-for="{ id, text } in list" :key="id" class="li">{{ text }}</li>
</ul>
</div>

想要获取到点击的li的索引,利用parentNode可以这样写:

handelLiClick({ target }) {
const {
classList,
parentNode: { children },
} = target
if (classList.contains('li')) {
const index = Array.from(children).indexOf(target)
}
}

还可以利用元素的自定义属性这样写

<ul class="ul" @click="handelLiClick">
<li v-for="{ id, text } in list" :key="id" :data-id="id" class="li">
{{ text }}
</li>
</ul>

将数据的唯一标识id存储在data-id属性中,然后在事件处理函数中获取到id.

handelLiClick({
target: {
classList,
dataset: { id }
}
}) {
if (classList.contains('li')) {
console.log(id)
}
}