2017-01-12 4 views
0

Ich möchte die Klassennamen aller Elemente mit der Klasse auf "Link" ändern. Ich verwende eine Methode, die über eine Klickaktion auf das Element aufgerufen wird. Ich habe ausprobiert eine Länge von der Funktion und das funktioniert gut, aber das Hinzufügen einer Klasse nicht. Wer weiß warum?className funktioniert nicht in VueJS-Methode

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

Antwort

1
document.getElementsByClassName('link') 

kehren Sie ein arra y-ähnliches Objekt von HTML-Elemente, und .className ist ein Attribut für jedes Element in diesem Objekt, vielleicht können Sie dies versuchen:

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

statt.

+0

Danke, ist die Möglichkeit, die Klasse zu all diesen Elementen hinzuzufügen, vielleicht mit einer ForEach-Schleife? –

2

Sie versuchen, die Klasse für alle Links mit Ihrem aktuellen Code zu ändern.

Was ich würde vorschlagen, ist stattdessen:

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

event.currentTarget wird der Link geklickt immer sein.

Wenn Sie wollen, dass sie alle „hullaballoo“, wenn man klickt Sie tun können:

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

jedoch mit, dies zu tun, ist nicht von Vorteil Vue nehmen. Du denkst auch DOM wie. Im Idealfall möchten Sie diese Klassen basierend auf einem bestimmten Status ändern. Sie müssen jedoch Ihre Frage klären, um eine bessere Antwort zu erhalten.

+0

Danke, aber ich möchte, dass alle Links nicht nur das currentTarget ändern. Ich weiß, es gibt einfachere Möglichkeiten, dies in Vue zu erreichen, aber ich finde, dass Vue keine einfachen Möglichkeiten gibt, das Dom zu modifizieren. Also versuche ich herauszufinden, wie ich Aufgaben ausführen kann, die in jQuery einfach, aber in Vue schwierig sind. Ich möchte Vue in einem zukünftigen Projekt verwenden und ich hoffe, jQuery durch Vue zu ersetzen, aber ich denke, dass ich jQuery für dom manipulation noch verwenden muss. –

+0

Es ist viel einfacher, das DOM mit Vue zu modifizieren, da es direkt an Daten gebunden ist. Sie können 'Link {{ link }}' tun. –

+0

aber Sie sehen, es ist irgendwie dumm ohne Reim oder Grund. –

Verwandte Themen