Produktvarianten Visual Studio 11

Microsoft hat die Produktvarianten für das neue Visual Studio 11 vorgestellt. wie im Heise-Ticker verlautet, wird es wieder Professional, Premium und Ultimate-Editionen neben den kostenlosen Express-Ausgaben geben.

Lightswitch wird, wie bereits vorher beschrieben, integriert sein.

Überraschung beim Preis: die Professional soll es für ca. 500 US-Dollar geben und damit fast 40 % günstiger sein als die aktuelle Professional für Visual Studio 10.

Ob sich dann noch ein MSDN-Abo rechnet?

Advertisements

Asynchrone Methoden einfach erstellen: ASYNC und AWAIT

Lange Wartezeiten auf Rückmeldung des Computers bei komplexen Programmierroutinen gehören unter .Net wohl bald der Vergangenheit an. Das Framework ab Version 4.5 bietet recht einfache Mittel, um einen Programmaufruf „asynchron“ zu gestalten. Die Zauberworte dazu sind „ASYNC“ und „AWAIT“.


War es bis Framework 4.0 noch ein wenig umständlich, eine Routine so aufzurufen, dass die übrigen Befehle weiter abgearbeitet wurden, so kann man heute fast automatisiert einen bequemeren Weg gehen. Ich zeige Ihnen hier anhand eines Beispiels, wie eine Routine aufgerufen wird, die asynchron ablaufen soll.
Das Beispiel beinhaltet eine Form (WPF), und eine Routine, die Asynchron eine Liste von Webseiten besucht und deren Größen ermittelt. Basis für diese Solution ist das Walk-Through-Beispiel von Microsoft, daher auch die vielen Links zu Microsoft-Webseiten.
Das Beispiel wurde in eine eigene Solution eingestellt, mit einer Form umgeben und insofern erweitert, als das es hier nun möglich ist, eigene Texte zu erfassen während im Hintergrund die Webseiten durchforstet werden.

Hinweis: Der hier angegebene Code wurde gekürzt und ist so nicht ablauffähig. Am Ende des Artikels können Sie die lauffähige Solution herunterladen und damit experimentieren.

Eine asynchrone Methode unterscheidet sich in zwei Dingen von einer normalen Methode:
– Sie beginnt mit dem Schlüsselwort „ASYNC“
– Sie liefert als Function immer das geforderte Objekt eingebettet in einem Task mit (bei einer Prozedur wird immer nur der Task zurückgeliefert).

Private Async Function GetURLContentsAsync(url As String) As Task(Of Byte())

Der Aufruf einer asynchronen Funktion wird wie gehabt durchgeführt, allerdings kann der Fortgang dieser Routine mit dem Schlüsselwort „AWAIT“ solange angehalten werden, bis die asynchrone Aufgabe erledigt ist:.

Dim getContentsTask As Task(Of Byte()) = Nothing
Dim urlContents As Byte() = Nothing
getContentsTask = GetURLContentsAsync(url)
urlContents = Await getContentsTask
'Rest der Routine wird erst abgearbeitet, wenn getContentsTask fertig ist...

D.h. der aufrufende asynchrone Job selbst läuft nicht weiter, aber die Anwendung als solche kann neue Befehle entgegennehmen. In dem Beispiel kann Text in eine Textbox eingegeben werden und der Text wird zu dem bisherigen Ergebnis in einem Label angezeigt, und das alles, während der asynchrone Job noch läuft.


Imports System.IO
Imports System.Net

Class MainWindow

'''
<summary>E: Start Async-Task
''' D: Asynchrone Aufgabe starten</summary>
Async Sub OnAsyncClick(sender As Object, e As RoutedEventArgs) Handles m_AsyncButton.Click
' Two-step async call.
Dim sumTask As Task = SumPageSizesAsync()
'AWAIT-State: the following steps in this method will only be processed when sumTask has finished!
Await sumTask

'...
End Sub

'''
<summary>E: assign textbox-text to result-label in sync-mode
''' D: Synchrone Uebertragung des Textes in die Ergebnisbox</summary>
Private Sub m_SyncButton_Click(sender As Object, e As RoutedEventArgs) Handles m_SyncButton.Click
resultLabelAsync.Content &= String.Format(vbCrLf & "{0,-58}", myTextBox.Text)
myTextBox.Text = ""
End Sub

Private Async Function SumPageSizesAsync() As Task

' Make a list of web addresses.
Dim urlList As List(Of String) = SetUpURLList() 'Routine liefert eine Liste mit URLs

Dim total = 0
For Each url In urlList
' GetURLContentsAsync returns a task. At completion, the task
' produces a byte array.
Dim getContentsTask As Task(Of Byte()) = Nothing
Dim urlContents As Byte() = Nothing
Try
getContentsTask = GetURLContentsAsync(url)

urlContents = Await getContentsTask
Catch ex As Exception
'Never do this in productive-environments!
'D: NIE in Produktivumgebungen so machen!
ex = Nothing
End Try
Next
End Function

Private Async Function GetURLContentsAsync(url As String) As Task(Of Byte())
' The downloaded resource ends up in the variable named content.
Dim content = New MemoryStream()
' Initialize an HttpWebRequest for the current URL.
Dim webReq = CType(WebRequest.Create(url), HttpWebRequest)
' Send the request to the Internet resource and wait for
' the response.
Dim responseTask As Task(Of WebResponse) = webReq.GetResponseAsync()

Try

Using response As WebResponse = Await responseTask

' Get the data stream that is associated with the specified URL.
Using responseStream As Stream = response.GetResponseStream()
' Read the bytes in responseStream and copy them to content.
' CopyToAsync returns a Task, not a Task.
Dim copyTask As Task = responseStream.CopyToAsync(content)

' When copyTask is completed, content contains a copy of
' responseStream.
Await copyTask

End Using
End Using
Catch ex As Exception 'e.g. URL not found
'Never do this in productive-environments!
'D: NIE in Produktivumgebungen so machen!
ex = Nothing
End Try
' Return the result as a byte array.
Return content.ToArray()
End Function

End Class

Ich empfinde das als riesige Erleichterung gegenüber den in den Vorgängerversionen notwendigen Mechanismus, wenngleich damit kein Multitasking eingeleitet wird! Es wird nämlich weder ein eigener Thread geschweige denn ein eigener Task aufgebaut!

Das komplette Beispiel als VS2012-Solution können Sie hier herunterladen.

Hinweis: .NET Framework 4.5 steht erst ab Sommer/Herbst 2012 zur Verfügung. Hier kann eine Vorab-Version installiert werden: FrameworkVS 2012

Haben Sie auch schon erste Schritte mit dem Framework 4.5 gemacht? Schreiben Sie hier Ihre Ergebnisse rein, und wenn Sie Fragen haben dürfen Sie mich gerne kontaktieren.

Preise und Lizenzvarianten für Visual Studio 2010 (und 2012)

Die professionelle Entwicklungsumgebung Visual Studio wird mit verschiedenen Lizenzmodellen vermarktet. Dabei sind Preisunterschiede von 0 € bis 5.100€ möglich! Hier lesen Sie, welche Möglichkeiten es für Entwickler gibt und was die Kosten sind.

Etliche Entwicklungsumgebungen gibt es kostenlos, als bekannteste sei hier einmal Eclipse genannt, aber auch Apple „verschenkt“ seine Entwicklungsumgebung XCode. Der Grund liegt nahe: Je mehr in einer bestimmten Umgebung entwickeln, umso mehr Anwendungen gibt es und umso mehr verbreitet sich auch die Technologie (wie z.B. IOS).

Andere Hersteller gehen hier andere Wege und stellen die Entwicklungsumgebung als Produkt kommerziell auf den Markt. Hier sei Embarcaderos Delphi herausgehoben, das man lediglich als Testversion für 0 € bekommen kann.

Microsoft geht hier einen Mittelweg, der wegen der komplexen und vielfältigen Möglichkeiten für den Entwickler eher steinig als golden ist. Der Überblick hier hilft, einige Steine aus dem Weg zu räumen.

Einzellizenz

Visual Studio kann man als ganz normale Einzellizenz erwerben, sei es von Microsoft, einem Online-Händler oder von einem Laden nebenan. Die Preise variieren dabei anhand der der Ausgabe. So ist Visual Studio Express kostenlos, während die „Ultimate“ gerade mal eben 5.099 € verschlingt.

Ein professioneller Entwickler kann leider mit der Express-Ausgabe lediglich lernen, mit dem Werkzeug umzugehen. Es fehlen ihm dann aber wichtige Tools und Eigenschaften, z.B. der für komplexe Projekte wichtige Solution-Mechanismus.

Die nächste Stufe, Visual Studio Professional, enthält schon alles, was ein einzelner Entwickler auch für komplexere Projekte benötigt, schlägt dann aber gleich mit 534 € zu buche.

Hier eine kleine Liste der Einzellizenzen mit direktem Link zu dem Anbieter:

Visual Studio Express, 0 €

Visual Studio Lightswitch, 369 €*

Visual Studio Professional, 534 € (Visual Studio 11 Professional inkl. Lightswitch voraussichtlich ca. 390 €)

* Lightswitch-Ausgabe beinhaltet Visual Studio Professional mit eingeschränktem Funktionsumfang und der Lightswitch-Erweiterung. Lightswitch kann man als Ersatz für Access als Entwicklungsumgebung sehen.

Die Version von Visual Studio 2012 gibt es derzeit als kostenlose Beta in der Professional Version bei MSDN.

MSDN-Subscriptions

MSDN (Microsoft Developer Network) ist die Abo-Version für alle Software-Produkte von Microsoft. Sie erhalten hier die Lizenzrechte für einen jährlichen Obolus für die Windows-Betriebssysteme (ab Windows 98 bis zur aktuellen Version). Allerdings sind die Rechte eingeschränkt und so manch ein freiberuflicher Programmierer verstößt unwissentlich gegen die Regeln. So ist die Nutzung ausschliesslich für die beruflichen Zwecke angegeben.

Das erste Jahr lässt sich Microsoft mit einem erhöhten Preis ab 750 € für das günstigste Abo bezahlen, das teuerste schlägt mit 12.740 € zu buche. Die Verlängerungen kosten dann nur noch ca. 65-30 % (535 € – 4100 €) des ersten Jahres.

Für die 750 € erhält man leider „nur“ den Zugang zu sämtlichen Betriebssystemen (MSDN Operating Systems), auf Visual Studio Professional kann man darüber nicht zugreifen.

Erst mit der nächsten Abo-Stufe (Visual Studio Professional with MSDN, erstes Jahr 1.300 €, danach 850 €)  wird einem auch der Zugang zu Visual Studio Professional gewährt. Und auf die Office-Produkte haben Sie erst mit der Premium-Edition, ab ca. 5.900 € im ersten Jahr, zugriff.

Diese hohen Preise lassen einen aufhorchen, aber man erhält dafür recht umfangreichen Zugang zu Software, die der User auch nach Kündigung des Abos weiter betreiben und nutzen darf!

Einen Überblick über die MSDN-Abos finden Sie hier.

Für Schüler, Studenten und Institute: „Dreamspark“ enthält Visual Studio Professional für 0 € 

Microsoft hat das Potential der Jugend erkannt und gibt auf einem eigenen Kanal (http://www.Dreamspark.com) für Schüler, Studenten und Institute Visual Studio Professional und einige zusätzliche Entwicklungswerkzeuge (insbesondere für die Entwicklung von Windows Phone) kostenlos ab. Der Schüler muss sich registrieren und seinen Status nachweisen. Schon hat er Zugriff auf VS Pro, für 0 €!

Details erfahren Sie hier.

Für Jungunternehmer: BizSpark

Für Startups und Jungunternehmer bietet Microsoft einen besonderen Leckerbissen. Wenn das Unternehmen jünger als drei Jahre ist und in der Branche der Softwareentwicklung tätig ist, hat gute Chancen, Visual Studio Professional und einige Anwendungen mehr kostenlos zu erhalten! Und mit einigen Anwendungen sind auch Anwendungen, die nicht aus dem Hause Microsoft sind, gemeint. So kann man die Controls von Syncfusion für ASP.Net MVC seit kurzem mit abonnieren, für 0 €. Auch die Cloud-Umgebung Windows Azure wird im Basispaket mit angeboten, und von manchen Drittanbietern gibt es vergünstigte Konditionen für den BizSpark-Greenhorn.

Details finden Sie hier: http://www.microsoft.com/bizspark/About/de-DE/

Für Kleinunternehmer: Action Pack

Nicht ganz kostenlos und als Mietmodel gedacht sind die Action Packs-Ausgaben. Gegen eine jährliche Gebühr von ca. 420 € erhalten Sie ein umfangreiches Paket inklusive Serverlizenzen, Office-Versionen und Zugängen zu Online-Trainings, das Ihnen die Anfangsinvestition sehr niedrig hält. Zu Beginn und danach alle zwei Jahre müssen Sie dafür zusätzlich einen Minitest auf der Webseite absolvieren. Dieser Test soll aber lediglich ein klein wenig vor Missbrauch schützen, für einen Entwickler sind da keine wirklichen Hürden dabei.

Informationen über das Action-Pack für Developer finden Sie unter https://partner.microsoft.com/germany/program/40138499.

Fazit:

Microsoft bietet wesentlich mehr als nur stupide und teure Einzellizenzierungen an. Ist man mal über die Express-Edition hinausgewachsen, kann man die Professional-Versionen und viele zusätzliche Anwendungen auch für wenig Geld ergattern. Ein paar Minuten Zeit sollte man sich schon nehmen und die Angebote studieren, sind doch die Pakete sehr unterschiedlich geschnürt.

Übrigens: Wenn Visual Studio 2012 (Visual Studio 11) voraussichtlich im Herbst 2012 auf den Markt kommt, sind Abonnenten (Action Pack, MSDN, BizSpark und DreamSpark) fein raus: In den Abos sind die neuen Version schon enthalten.

Visual Studio 2012 und Framework 4.5 erhältlich als Vorabversion

Seit Anfang März ist die Beta-Version von Visual Studio 11 (Visual Studio 2012) bei MSDN veröffentlicht und kann heruntergeladen werden. Hier erfahren Sie, wie Sie die neue Entwicklungsumgebung auf Ihren Rechner bekommen.

Unter http://www.microsoft.com/visualstudio/11/de-de/downloads finden Sie die Version im Beta-Stadium. Auch wenn Sie nicht bei Microsofts MSDN angemeldet sind, können Sie dort diese Version herunterladen.

Zunächst einmal verweist dieser Link auf eine Loader-Datei, die nicht das Visual Studio selbst enthält sondern ein kleines Programm ist, welches die notwendigen Daten aus dem Internet herunterlädt. Auch nachdem die Loader-Datei auf dem Computer gespeichert wurde, ist also eine gute Internetverbindung für das Ausführen des Setup erforderlich!

Die Testversion wurde hier auf einer VirtualBox-Instanz des Windows 8 Consumer Preview installiert. Nachdem die Loader-Datei angestartet wurde, erscheint recht schnell der Setup-Begrüßungsbildschirm im neuen Outfit, ein dunkelgrauer Dialog mit grauschattiertem Visual Studio Logo. Bunte Welt ade.

Mehr als 6 GB zeigt der Dialog an, würden für die Installation an Festplattenplatz benötigt. Nun ja, die VirtualBox wurde mit 20 GB eingerichtet, und da ausser dem Betriebssystem nichts installiert ist, sollte das ausreichen. Nach der Bestätigung des Dialogs kann man erst einmal Kaffee trinken, das Auto waschen, die Kinder vom Kindergarten abholen und was man sonst noch so machen kann, in einer Stunde. Erst jetzt werden die Dateien heruntergeladen und installiert, und das dauert.

Anzeige des Installationsfortschritts

Auf den ersten Blick mag dann die neue Aktivitätsleiste interessant erscheinen: Einzelne Punkte treffen sich in der Mitte des Installationsdialogs von links kommend, und rauschen dann wieder in der gleichen Reihenfolge nach rechts raus, um dann wieder von links kommend sich in der Mitte zu versammeln und das Spiel unendlich oft zu wiederholen. Ob sich dieses Spiel unterbindet, wenn ein Fehler auftaucht und die Installation in sich selbst gefangen ist?

Unerklärlicherweise verschwindet nach etwas mehr als einer Stunde dieser Installationsdialog. Passiert ist sonst nichts. Auch wurde kein Link auf Visual Studio angelegt. Die Installation war gescheitert.

Gleich darauf noch einmal angestartet, gleiche Vorgehensweise, und hier sind dann nach noch einmal einer Stunde Erfolge zu sehen:

Installationsergebnis mit Start-Schaltfläche

Die fehlende App-Certifikation tolerieren wir hier großzügig und klicken voller Erwartung auf „LAUNCH“.

Wie auch bei den Vorgängerversionen darf man sich beim ersten Starten von Visual Studio seine Lieblings-Zielumgebung aussuchen, um die optimalen Tastaturbefehle zu laden. Lightswitch wurde dabei hier gleich integriert.

Die Hilfe, die hier noch gar nicht mit installiert wurde, kann über die Option „Local Help Documentation“ direkt heruntergeladen werden, eine zusätzliche Nachinstallation kann damit entfallen.

Anschließend steht einem das neue Visual Studio in der Beta-Version zur Verfügung. Heureka.

In meinen nächsten Blogs erfahren Sie etwas über die neue Entwicklungsumgebung selbst.

Einstieg in C#: Videokurse zum nachahmen

Das Erlernen einer neuen Programmiersprache kann sehr mühselig sein und einsam machen. Dicke Bücher stapeln sich auf dem Tisch und die Notizzettel liegen verteilt im Zimmer herum. Für die ersten Schritte geht es aber auch anders!

Ein Kurs, auf Video, bringt einem den Lehrer, oder in diesem Fall die Lehrerin, direkt ins Haus.

DVD in den Rechner einlegen, Lektionen anschauen und während oder nach dem Kurs die Codes nachbilden. Und wenn etwas zu schnell geht, einfach auf Pause und zurückspulen.

Ich habe das vor kurzen mit einer DVD für C# gemacht und fand das recht unterhaltsam, aber auch informativ. Ca. 10 Stunden Trainingsmaterial sind nicht gerade viel, aber sie reichen, um einen ersten Eindruck vermittelt zu bekommen. Und ein paar Tricks für die etwas Geübteren sind da auch gleich mit dabei. Mir hat es gefallen, und ich würde mir wünschen, so etwas gäbe es für viele anderen Sprachen auch.

Die DVD gibt es für unter 35 € z.B. bei Amazon.

 Galileo Press Visual C# – Das umfassende Training

Bei Änderung von Variablenwerten einen Event auslösen

Hier erfahren Sie, wie Sie ein Ereignis auslösen können, wenn eine einfache Variable z.B. vom Typ Integer oder String, einen anderen Wert erhält.

Für Objekte im .NET können Sie bei der Deklaration das Attribut „withEvents“ mitgeben, dann haben Sie alle Ereignisse (Events) des Objekts zur Verfügung und können das mitnutzen:

private withEvents myItem as myControl

Alle Events, die dann in myControl mit public deklariert sind (und die ererbten) stehen Ihnen damit zur Nutzung bereit.
Anders sieht es bei einfachen Variablen aus.

private withEvents myInteger as Integer

wird scheitern, da „Integer“ in diesem Sinne keine Events kennt. Ein kleiner Trick kann Abhilfe schaffen.
Definieren Sie einen eigenen Event und lösen Sie ihn durch Ummanteln der Variable in einem Property aus!

Zunächst die Eventdeklaration:

Public Event MyVariableIntegerChanged

Deklarieren Sie die Property:

Property ThisInteger as Integer
Get
  Return myInteger
End Get
Set (ByVal value as Integer)
 myInteger = value
 RaiseEvent MyVariableIntegerChanged
End Set

Jetzt achten Sie darauf, die Variable nicht direkt sondern über das Property zu ändern, schon haben Sie das gewünschte Ergebnis:

Public Sub New()
    ThisInteger = 1 'belegt den Wert der Variablen myInteger mit 1 und löst den Event MyVariableIntegerChanged aus
End Sub

Das ganze in einer Klasse:

Public Class VariablenEventTest
 Dim myInteger as Integer
Public Event MyVariableIntegerChanged
Property ThisInteger as Integer
Get
  Return myInteger
End Get
Set (ByVal value as Integer)
 myInteger = value
 RaiseEvent MyVariableIntegerChanged
End Set
Public Sub New()
    ThisInteger = 1 'belegt den Wert der Variablen myInteger mit 1 und löst den Event MyVariableIntegerChanged aus
End Sub
End Class

Ich kann nun auf den Event wie gewohnt reagieren, z.B. innerhalb der Klasse

Private Sub MyHandle() handles MyVariableIntegerChanged
 Messagebox.Show("Die Variable myInteger wurde geändert")
End Sub

Da ich hier den Event mit Public deklariert habe, steht er auch andernorts bei der Nutzung der Klasse zur Verfügung:

Public Class Irgendwo
Private withEvents meineKlasse as VariablenEventTest
Public Sub New()
meineKlasse = New VariablenEventTest()
End Sub

Private Sub MyHandle() handles meineKlasse.MyVariableIntegerChanged
 Messagebox.Show("Die Variable myInteger wurde geändert")
End Sub
End Class

In HTML zur Laufzeit die CSS-Klasse austauschen

Immer wieder ist es in meinen Webprojekten erforderlich, HTML-Elemente oder ganze Gruppen von Elementen mit anderen Stylesheets-Klassen (CSS) während der Laufzeit zu bestücken. Javascript hilft hier weiter, damit kann man nämlich die Klassen „togglen“, also austauschen.

Dazu sind aber ein paar kleinere Schritte (functions) notwendig.

  1. Untersuchen, ob dem Dom-Objekt die Klasse schon zugeordnet wurde
  2. Wenn JA, das Objekt entfernen
  3. Die  neue Klasse zuordnen; dabei auch prüfen, ob sie nicht schon zugeordnet ist.

Zunächst einmal wollen wir in einem Objekt (hier: „item“) prüfen, ob die CSS-Klasse nicht bereits zugewiesen wurde.

Jedes DOMObjekt hat zur Laufzeit eine Property „className“, die die zugewiesenen Klassen in einem String enthält. Details dazu finden Sie auf Mozilla.org.

Mittels RegularExpressions kann nun nach dem Klassennamen gesucht werden (kryptisch: ‚(\\s|^)‘ + assignedClass + ‚(\\s|$)‘)
Gibt es kein result, wird der Defaultwert „false“ zurückgeliefert, die Klasse ist also nicht enthalten:

 /* hat ein Element eine CSS-Klasse? */
/* item ist ein Objekt aus der DOM-Hierarchy (= getItembyID()) */
/* assignedClass ist der Name der CSS-Klasse, nach der gesucht werden soll */
 function ItemHasCSSClassAssigned(item, assignedClass) {
 var result = false;
 if(!(item == null)) {
 result = item.className.match(new RegExp('(\\s|^)' + assignedClass + '(\\s|$)'));
 }
 return result;
 }

In einer übergeordneten Funktion kann nun die Zuweisung erfolgen; dabei wird geprüft, ob nicht bereits zugewiesen wurde:

/* Einem Element eine Klasse zuweisen: */
 function AssignClassToItem(item, assignableClass) {
 if(!ItemHasCSSClassAssigned(item,assignableClass)) {
 item.className += " " + assignableClass;
 }
 }

Das Entfernen einer Klasse geht ebenfalls über die Eigenschaft „className“. Dabei wird der zu entfernende Name der CSS-Klasse in dem String durch ein Leerzeichen ersetzt. Dann sieht die Funktion zum Entfernen so aus:


/* Eine Klasse aus einem Element entfernen: */
 function ResignClassFromItem(item, resignableClass) {
 if (ItemHasCSSClassAssigned(item, resignableClass)) {
 var classString = new RegExp('(\\s|^)' + resignableClass + '(\\s|$)');
 item.className = item.className.replace(classString, ' ');
}

}

Jetzt kann der Austausch einfach erfolgen, in dem man die oben genannten Funktionen in einer einzigen Funktion aufruft. Zuerst wird die „alte“ Klasse entzogen, anschliessend die „neue“ Klasse dem Objekt zugeordnet:

</pre>
/* Eine Klasse durch eine andere ersetzen */
 function ReplaceAssignedClass(item,oldClass,newClass) {
 ResignClassFromItem(item, oldClass);
 AssignClassToItem(item, newClass);
 }

Noch einen draufsetzen kann man, indem man immer die gerade aktive Klasse durch eine inaktive Klasse austauschen kann. Auch das ist mit nun möglich:


/* Wechselt zwischen Klasse1 und Klasse2, jenachdem welche gesetzt war */
/*item ist das HTML-Objekt, class1 und class2 sind die CSS-Klassennamen (Strings) */
 function ToggleClass(item, class1, class2) {
 if (ItemHasCSSClassAssigned(item, class1)) {
 ReplaceAssignedClass(item, class1, class2);
 } else if (ItemHasCSSClassAssigned(item, class2)) {
 ReplaceAssignedClass(item, class2, class1);
 } else {
 AssignClassToItem(item, class1);
 }
 }

Hier halten Sie Antworten gleich auf mehrere Fragen  in der Hand: Wie kann ich herausfinden, ob eine CSS-Klasse einem HTML-Element zugeordnet ist? Wie kann ich eine CSS-Klasse einem HTML-Element zuweisen? Wie kann ich eine CSS-Klasse durch eine andere ersetzen?  Ein paar Zeilen Javascript!

%d Bloggern gefällt das: