单击vue js时更改td元素的颜色

Posted

技术标签:

【中文标题】单击vue js时更改td元素的颜色【英文标题】:Change color of td element when clicked vue js 【发布时间】:2022-01-19 14:59:06 【问题描述】:

首先填充此表时,每个文本都是灰色的并带有删除线,并且按钮被禁用。我想要的是当我单击任何特定行时,它会将颜色更改为黑色和 text-decoration:none 并仅启用该行上的按钮。

当前代码在点击任意一行时会更改每一行的颜色和文本装饰。

<table class="table table-striped">
 <tbody>
  <tr v-for="(line,index) in summary_lines_list" :key="index">
   <td><p :class="'line_'+index" v-on:click="EnableLine($event)" :style='"text-decoration":(line_selected?"none":"line-through"),"color":(line_selected?"black":"grey")'>line</p> </td>
   <td><button :class="'btn btn-sm btn-success line_'+index" :disabled="!line_selected">Use</button></td>
  </tr>
 </tbody>
</table>

点击方式:

methods:
    EnableLine(event)
      this.line_selected = !this.line_selected;
    ,


data()
      return 
             line_selected:false

【问题讨论】:

【参考方案1】:

您应该保存所选行的索引以仅突出显示一行而不是全部

EnableLine(index)

 :style='"text-decoration":(line_selected === index?"none":"line-through"),"color":(line_selected?"black":"grey")'

对于多行选择,您需要创建数组来存储所有选择的索引。看看例子!

new Vue(
  el: "#app",
  data: () => (
    summary_lines_list: [
      'first line', 
      'second line',
      'third line',
      'fourth line'
    ],
    line_selected: []
  ),
  methods: 
    isSelected(index) 
      return this.line_selected.includes(index)
    ,
    
    toggle: function(index)
        if(this.isSelected(index)) 
        this.line_selected.splice(this.line_selected.indexOf(index), 1)
       else 
        this.line_selected.push(index)
      
    ,
    
    style(index) 
      const isSelected = this.isSelected(index)
      return 
        'text-decoration': isSelected ? 'none' : 'line-through',
        'color': isSelected ? 'black' : 'grey'
      
    
  
)
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
  <table class="table table-striped">
   <tbody>
    <tr v-for="(line, index) in summary_lines_list" :key="index">
     <td>
      <p 
        :class="'line_'+index"
        v-on:click="toggle(index)"
        :style="style(index)"
      >line</p>
     </td>
     <td>
      <button 
        class="btn btn-sm btn-success"
        :class="'line_'+index"
        :disabled="!isSelected(index)"
      >Use</button>
     </td>
   </tr>
 </tbody>
</table>
</div>

【讨论】:

它正在工作,但可以选择任意数量的行。目前,我只能选择一行。 @HemantSah 检查编辑的评论 谢谢,它非常适合我。

以上是关于单击vue js时更改td元素的颜色的主要内容,如果未能解决你的问题,请参考以下文章

VueJs - 使用过渡更改 div 颜色

如何用js更改tr的背景颜色 新手求助

onClick事件更改类名反应js

如何通过单击按钮更改 SVG 元素的颜色? [复制]

如何在单击功能中使用动画更改元素的背景颜色? [复制]

如何在反应js中更改按钮onClick的背景颜色?