vue实现div多选
Vue 实现 Div 多选功能
在 Vue 中实现 Div 多选功能可以通过以下方法完成,主要利用 v-model 或 v-for 结合事件处理实现多选逻辑。

方法一:基于 v-model 绑定数组
通过 v-model 绑定一个数组,动态记录选中的 Div 的标识(如 ID 或索引)。

<template>
<div>
<div
v-for="item in items"
:key="item.id"
@click="toggleSelect(item.id)"
:class="{ 'selected': selectedItems.includes(item.id) }"
>
{{ item.text }}
</div>
</div>
</template>
<script>
export default {
data() {
return {
items: [
{ id: 1, text: '选项1' },
{ id: 2, text: '选项2' },
{ id: 3, text: '选项3' },
],
selectedItems: []
};
},
methods: {
toggleSelect(id) {
const index = this.selectedItems.indexOf(id);
if (index === -1) {
this.selectedItems.push(id);
} else {
this.selectedItems.splice(index, 1);
}
}
}
};
</script>
<style>
.selected {
background-color: #42b983;
color: white;
}
</style>
- 通过
v-for渲染多个 Div。 - 点击 Div 时调用
toggleSelect方法,动态更新selectedItems数组。 - 通过
:class绑定高亮样式。
方法二:基于 v-for 和动态属性
直接通过 v-for 遍历数据,并通过动态属性控制选中状态。
<template>
<div>
<div
v-for="(item, index) in items"
:key="index"
@click="toggleItem(index)"
:class="{ 'selected': item.selected }"
>
{{ item.text }}
</div>
</div>
</template>
<script>
export default {
data() {
return {
items: [
{ text: '选项1', selected: false },
{ text: '选项2', selected: false },
{ text: '选项3', selected: false },
]
};
},
methods: {
toggleItem(index) {
this.items[index].selected = !this.items[index].selected;
}
}
};
</script>
<style>
.selected {
background-color: #42b983;
color: white;
}
</style>
- 直接在数据对象中维护
selected属性。 - 点击时切换
selected状态。
方法三:支持 Ctrl/Shift 多选
通过监听键盘事件,实现类似文件管理器的多选逻辑。
<template>
<div @keydown.ctrl="isCtrlPressed = true" @keyup.ctrl="isCtrlPressed = false">
<div
v-for="(item, index) in items"
:key="index"
@click="handleSelect(index)"
:class="{ 'selected': item.selected }"
>
{{ item.text }}
</div>
</div>
</template>
<script>
export default {
data() {
return {
items: [
{ text: '选项1', selected: false },
{ text: '选项2', selected: false },
{ text: '选项3', selected: false },
],
isCtrlPressed: false
};
},
methods: {
handleSelect(index) {
if (this.isCtrlPressed) {
this.items[index].selected = !this.items[index].selected;
} else {
this.items.forEach((item, i) => {
item.selected = i === index;
});
}
}
}
};
</script>
- 监听
Ctrl键按下状态。 - 按住
Ctrl时点击 Div 可多选,否则单选。
注意事项
- 性能优化:如果数据量较大,避免直接操作数组,可以使用
Set或Map存储选中状态。 - 样式交互:通过 CSS 提供视觉反馈(如高亮、阴影)。
- 键盘兼容性:方法三需确保用户明确操作逻辑(如提示“按住 Ctrl 多选”)。
以上方法可根据实际需求调整,例如支持全选、反选等功能。






