You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue.js技术问询:点击CLICK-ME如何仅改变对应CHANGE-COLOR背景色

在Vue.js中实现点击元素切换对应项背景色的方案

嘿,这个需求在Vue里其实很容易实现,而且完全不用像jQuery那样直接操作DOM——毕竟Vue是数据驱动的嘛!我给你两种常见的实现方式,你可以根据自己的场景选择:

方式一:给每个todo项添加状态属性

这种方式适合你可以修改todos数组结构的情况,直接把高亮状态存在每个todo里,逻辑最直观:

首先在组件的data中,给每个todo项新增一个状态属性(比如isHighlighted),初始值设为false:

data() {
  return {
    todos: [
      { name: '买牛奶', isHighlighted: false },
      { name: '写代码', isHighlighted: false },
      // 其他todo项...
    ]
  }
}

然后修改模板,给点击元素绑定切换状态的事件,同时给目标li绑定动态class:

<div v-for="(todo, n) in todos" :key="n">
  <i class="CLICK-ME" @click="todo.isHighlighted = !todo.isHighlighted"></i>
  <li class="CHANGE-COLOR" :class="{ red: todo.isHighlighted }"> 
    {{ todo.name }} 
  </li>
</div>

最后别忘了在样式里定义red类:

.red {
  background-color: red;
}

方式二:单独维护状态数组(不修改原todos)

如果你不想改动原有的todos数据结构,可以单独用一个数组来记录哪些项需要高亮:

首先在data里新增一个数组用来存高亮项的索引:

data() {
  return {
    todos: [/* 你的原有todo数据 */],
    highlightedIndexes: []
  }
}

然后添加一个方法来切换指定索引项的高亮状态:

methods: {
  toggleHighlight(index) {
    if (this.highlightedIndexes.includes(index)) {
      // 若已高亮,移除索引
      this.highlightedIndexes = this.highlightedIndexes.filter(i => i !== index)
    } else {
      // 若未高亮,添加索引
      this.highlightedIndexes.push(index)
    }
  }
}

模板部分改成这样:

<div v-for="(todo, n) in todos" :key="n">
  <i class="CLICK-ME" @click="toggleHighlight(n)"></i>
  <li class="CHANGE-COLOR" :class="{ red: highlightedIndexes.includes(n) }"> 
    {{ todo.name }} 
  </li>
</div>

小提示

这两种方式都是遵循Vue的数据驱动视图原则,不像jQuery那样直接操作DOM元素。通过修改数据状态,让Vue自动帮我们更新视图,这样代码更清晰,也更容易维护~

内容的提问来源于stack exchange,提问作者Luco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 09:58:12