2017-12-19 1 views
0

Ich habe ein Div mit einer ID von '#Main "und ich versuche, CSS-Klassen für dieses div mit einer Sammlung von Variablen zu ändern. Mit +' '+ zwischen den Variablen scheint viel Leerraum zwischen den Klassen hinzufügen, deshalb war ich versucht, alle Variablen in einem Array zu verwenden, hinzufügen und Split-Eigenschaft verwenden, aber so weit ich bin so zu tun, nicht in der LagejQuery Split Variablenwerte im Array

Mein Code:.

jQuery

var MainClasses =""; 
var BackgroundColor=""; 
var BackgroundPattern =""; 
var TxtColor=""; 

// Some code & conditions here which is assigning CSS classes to these variables 

BackgroundColor = "Background-Red"; 
BackgroundPattern ="Pattern-2"; 
TxtColor = "Txt-Color-Green"; 

upDateTheme(); 

function upDateTheme() { 
    $('#Main').removeClass(); 
    var ClassColletion = 'BackgroundColor, BackgroundPattern, TxtColor'; 
    MainClasses = ClassColletion.split(' '); 
    $('#Main').addClass(MainClasses); 
} 

Expected HTML Ergebnis

<div id="Main" class="Background-Red Pattern-2 Txt-Color-Green"> Some Content here </div> 
+0

'' var ClassCollection ... 'IST keine richtige Array. Was Sie tun möchten, ist eher wie 'var ClassCollection = [BackgroundColor, BackgroundPattern, TxtColor];' –

Antwort

2

Ein paar Dinge hier:

  1. Sie brauchen nicht Ihre MainClasses Objekt in eine Zeichenfolge zu initialisieren. Verwenden Sie diese zusätzliche Variable nicht einmal. Verwenden Sie einfach Ihre ClassCollection.
  2. Wenn Sie die split tun, Split auf das Komma, nicht das Leerzeichen.
  3. Setzen Sie Ihre Variablen in ein Array.
  4. Verwenden Sie eine Schleife, um die Klassennamen (addClass) anzuwenden. Array-Objekte werden nicht standardmäßig unterstützt.

Dies sollte erhalten Sie gehen:

var BackgroundColor=""; 
 
var BackgroundPattern =""; 
 
var TxtColor=""; 
 

 
// Some code & conditions here which is assigning CSS classes to these variables 
 

 
BackgroundColor = "Background-Red"; 
 
BackgroundPattern ="Pattern-2"; 
 
TxtColor = "Txt-Color-Green"; 
 

 
upDateTheme(); 
 

 
function upDateTheme() { 
 
    $('#Main').removeClass(); 
 
    var ClassColletion = [BackgroundColor,BackgroundPattern,TxtColor]; 
 
    for (var i in ClassColletion) { 
 
     if (i && ClassColletion[i]) { 
 
      $('#Main').addClass(ClassColletion[i]); 
 
     } 
 
    } 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id='Main'>main div</div>

+0

Freund ist das Hinzufügen des Namens der Variablen im HTML anstelle des Werts dieser Variablen. Der Grund für die versuchte Aufteilung ist, wenn eine Variable keine Klasse hat, d. H. Wenn var 'BackgroundPattern' keine Klasse hat, sollte in HTML kein zusätzlicher Platz vorhanden sein. –

+0

Das habe ich erst nach meinem ersten Post bemerkt, also schaust du dir wahrscheinlich die alte Version meines Posts an. Überprüfen Sie meinen aktualisierten Beitrag. Es weist den Wert der Variablen (nicht die Variablennamen) zu. –

+0

Danke Matt, das hat das Problem gelöst, aber es gibt einen Fehler, den ich sehe. Mein Editor zeigt eine Warnung an, dass der Körper von for in in eine if-Anweisung eingeschlossen werden sollte, um unerwünschte Eigenschaften vom Prototyp zu filtern. Irgendwelche Vorschläge dazu bitte? –

0

Von jQuery documentation:

.addClass(className)

classname; Typ: Zeichenfolge; Eine oder mehrere durch Leerzeichen getrennte Klassen, die dem Klassenattribut jedes übereinstimmenden Elements hinzugefügt werden.

Thererfore

BackgroundColor = "Background-Red"; 
BackgroundPattern = "Pattern-2"; 
TxtColor = "Txt-Color-Green"; 

upDateTheme(); 

function upDateTheme() { 
    $('#Main').removeClass(); 
    var ClassColletion = [BackgroundColor, BackgroundPattern, TxtColor]; 
    var MainClasses = ClassColletion.join(' '); 
    $('#Main').addClass(MainClasses); 
} 

Oder in einem einzigen Ausdruck:

function upDateTheme() { 
    $('#Main').removeClass().addClass([BackgroundColor, BackgroundPattern, TxtColor].join(' ')); 
}