className 在 VueJS 方法中不起作用

className not working in VueJS method

我想更改 "link" 上具有 class 的所有元素的 class 名称。我正在使用一种通过元素上的单击操作调用的方法。我测试了从函数中获取长度并且工作正常但添加 class 没有。有人知道为什么吗?

HTML

<div id="app">
  <ul>
    <li><a href="#" class="link" @click="myFunc">Link text 1</a></li>
    <li><a href="#" class="link" @click="myFunc">Link text 2</a></li>
    <li><a href="#" class="link" @click="myFunc">Link text 3</a></li>
  </ul>
</div>

JS

var app = new Vue({
el: '#app',
methods: {
  myFunc: function(event){

      // works
      var ElLength = document.getElementsByClassName('link').length;
      console.log('ElLength = ' + ElLength);

      // does not work
      document.getElementsByClassName('link').className += " hullaballoo";

    }
  }
});

JSFIDDLE

document.getElementsByClassName('link') 

returns 你是 html 元素的 array-like 对象,而 .className 是这个对象中每个元素的属性,也许你可以试试这个:

document.getElementsByClassName('link')[0].className += " hullaballoo";

相反。

您正在尝试使用当前代码更改所有 link 上的 class。

我建议的是:

event.currentTarget.classList.toggle('hullaballoo');

event.currentTarget 将永远是您点击的 link。

如果您想要全部 "hullaballoo" 单击其中一个,您可以执行以下操作:

<a v-for="link in 3" 
   href="#probably-actually-want-a-button"
   @click.prevent="allSelected = !allSelected"
   :class="{ hullaballoo: allSelected }">
   Link {{ link }}
</a>

但是,必须这样做并不是利用 Vue。你也在想 DOM 喜欢。理想情况下,您希望根据您所处的某些状态更改这些 classes。不过,您需要进一步澄清您的问题以获得更好的答案。

接受的答案将 return 文档中的所有匹配元素。

如果你只是想在你的组件中获取它们,你可以这样做:

this.$el.getElementsByClassName('link')

https://vuejs.org/v2/api/#vm-el