#javascript #css #vue.js #class
Вопрос:
Я пытаюсь удалить все классы внутри родительского элемента, структура выглядит следующим образом
<div id="middleCol">
<section class="toggleSection" id="step1" v-on:click="toggleStep($event)" ref="step1">
<small>Step 1</small>
<h5>Flight Details</h5>
</section>
<section class="toggleSection" id="step2" v-on:click="toggleStep($event)" ref="step2">
<small>Step 2</small>
<h5>Traveler Info</h5>
</section>
<section class="toggleSection" id="step3" v-on:click="toggleStep($event)" ref="step3" >
<small>Step 3</small>
<h5>Payment</h5>
</section>
</div>
в основном это вкладки, и я хочу применять активный класс только к одному div за раз, мой план состоит в том, чтобы удалить все классы, а затем добавить активный класс на любую вкладку, на которую нажимается событие, но я получаю сообщение об ошибке, что свойство className для других дочерних элементов не существует, функция работает для добавления классов, просто чтобы не удалять их, я видел несколько решений jquery, но я надеялся найти ванильное
любая помощь будет признательна 🙂
вот функция, которую я пытаюсь использовать
function toggleActive(event){
let element = event.currentTarget
let parent = element.parentNode.children;
console.log(element)
console.log(parent)
for (let child in parent){
parent[child.value].className = ''
}
element.classList.add("toggleSectionActive");
}
Комментарии:
1. Однако в структуре, которую вы показываете, нет классов. Было бы лучше показать пример того, с чего бы вы начали и чем бы хотели закончить, с кодом, который вы уже написали, чтобы попытаться достичь этого.
2. спасибо, я обновил фрагмент соответствующего кода шаблона vue, который я использую
3. если вы используете Vue, я бы предложил использовать привязку классов Vue и позволить Vue решать, какие классы использовать для каждого раздела, вместо того, чтобы изменять их вручную vuejs.org/v2/guide/class-and-style.html , они даже показывают пример
isActive
класса
Ответ №1:
Попробуйте привязать класс и использовать v-for для разделов:
new Vue({
el: '#demo',
data(){
return {
toggled: 0,
sections: [
{id: 0, name: 'Step 1', desc: 'Flight Details'},
{id: 1, name: 'Step 2', desc: 'Traveler Info'},
{id: 2, name: 'Step 3', desc: 'Payment'}
]
}
},
methods: {
toggleStep(id){
this.toggled = id
}
}
})
.active {
color: red;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="demo">
<div id="middleCol">
<section :class="section.id === toggled amp;amp; 'active'" v-for="section in sections" :key="section.id" @click="toggleStep(section.id)">
<small>{{ section.name }}</small>
<h5>{{ section.desc }}</h5>
</section>
</div>
</div>
Комментарии:
1. спасибо, это сломало все для меня 🙂 Я следовал примерам vbind, пытаясь понять это, спасибо, что выложили для меня подходящую демонстрацию