如何使用 css 和/或 javascript 动态更改样式

Posted

技术标签:

【中文标题】如何使用 css 和/或 javascript 动态更改样式【英文标题】:How to dynamic change styles with css and/or javascript 【发布时间】:2019-08-18 09:58:59 【问题描述】:

我有一个按钮,我需要在单击它时更改一些样式。我可能可以通过添加和删除一些类轻松地做到这一点,但是我在页面运行时更改了第一个元素,所以现在我需要从第一个元素中删除样式并将其应用到单击的按钮上,但实际上我没有得到我怎么能使它成为第 n 个孩子(1)的原因。有人可以帮忙吗?

这是我的html

<tr>
<!-- ko foreach: optionValues -->
<td>
    <input type="radio" id="volt" name="volt"
        data-bind="attr: id: 'CC-prodDetails-' + $data.value, value: $parent.selectedOption">
    <button data-bind="attr: for: 'CC-prodDetails-' + $data.value, text:key, 
                                                click:function(key)
                                                    $parent.selectedOption(key);
                                                    $parent.selectedOptionValue(key);
                                                " class="voltagem"></button>
</td>
<!-- /ko -->

这就是我的 CSS:

input 
  display: none;


.voltagem 
  font-size: 20px;
  border-color: #333;
  border-radius: 10px;
  border-style: dotted;
  margin-left: 25px;
  height: 55px;
  width: 135px;
  background-color: transparent;


.voltagem:focus 
  border-color: blue;
  border-style: solid;
  outline: none;


td:nth-child(1) .voltagem 
  border-color: blue;
  border-style: solid;
  outline: none;

【问题讨论】:

【参考方案1】:

您可以为此使用css 绑定。如果$parent.selectedOption() === key 则将类voltagem 设置为按钮

const model = function() 
  const self = this;
  const options = [  key: "one" ,  key: "two" ,  key: "three" ];
  self.optionValues = ko.observable(options);
  self.selectedOption = ko.observable(options[0].key);


ko.applyBindings(new model)
.voltagem 
  color: red
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<table>
  <tr>
    <!-- ko foreach: optionValues -->
    <td>
      <button data-bind="text: key, 
                         click: function(obj)  $parent.selectedOption(obj.key) ,
                         css:  voltagem: $parent.selectedOption() == key ">
      </button>
    </td>
    <!-- /ko -->
  </tr>
</table>

注意:需要将click绑定函数改为

function(obj) 
  $parent.selectedOption(obj.key)
  $parent.selectedOptionValue(obj.key)

【讨论】:

我试过这个,但没有在我的项目上工作。我收到“错误您不能多次将绑定应用于同一元素” @MateusFernando 出了点问题。这在 sn-p 中运行良好。 也许一些 js/jquery 唯一的解决方案可以帮助我更好地解决这个问题,因为我无法更改 ko 代码...

以上是关于如何使用 css 和/或 javascript 动态更改样式的主要内容,如果未能解决你的问题,请参考以下文章

2017 年用于 UI 设计的 CSS3 和 JavaScript 动画库(TOP 9)

CSS vs. JS Animation: 哪个更快

全新出炉,15个超有趣的 JavaScript 和 CSS 库

如何使用 css 和/或 javascript 动态更改样式

大标题在此

2019年值得推荐的11款JavaScript动画库