2017-03-14 4 views
1

Neu bei StackOverFlow - Haben Sie einfach eine einfache Frage.Arrays funktionieren nicht mit If-Anweisung

Bitte lassen Sie mich wissen, warum die Farbe des Div-Elements nicht geändert wird, wenn die Bedingung für die If-Anweisung erfüllt ist. Die Anzeigeeigenschaft von .MeTest ist "Block". Außerdem befinden sich keine Fehlermeldungen in der Konsole.

Hier ist mein Testcode:

var x = document.getElementsByClassName("MeTest"); 
 

 
if (x[0].style.display == 'block') 
 
{ 
 
    document.getElementsByClassName("haveIt")[1].style.backgroundColor = "red"; 
 
}
#MeTest { 
 
    position: fixed; 
 
    height: 200px; 
 
    width: 200px; 
 
    background-color: #fdacc3; 
 
} 
 

 
div { 
 
    background: #4dd329; 
 
    border: 1px solid white; 
 
    height: 200px; 
 
    width: 200px; 
 
    display: block; 
 
} 
 

 
.MeTest { 
 
    display: block; 
 
}
<div class="MeTest"></div> 
 
<div class="testThis" style="float: right;"></div> 
 
<div class="haveIt" style="position: fixed; top: 400px;"></div>

Dank!

+0

Hit F12, sollten Sie mindestens 1 Fehler dort sehen –

Antwort

3

Sie haben nur ein Element mit dem Klassennamen haveIt. So sollten Sie die folgende Änderung vornehmen:

document.getElementsByClassName("haveIt")[0] 

Weiterhin in orde Sie die Bedingung erfüllt sein überprüfen, sollten Sie einen Stil mit Anzeigeblock für die div mit der Klasse MeTest definieren.

var x = document.getElementsByClassName("MeTest"); 
 
if (x[0].style.display == 'block') 
 
{ 
 
    document.getElementsByClassName("haveIt")[0].style.backgroundColor = "red"; 
 
}
#MeTest{ 
 

 
    position: fixed; 
 
    height: 200px; 
 
    width: 200px; 
 
    background-color: #fdacc3; 
 

 
} 
 

 
div{ 
 
    background: #4dd329; 
 
    border: 1px solid white; 
 
    height: 200px; width: 200px; 
 
    display: block; 
 
} 
 

 
.MeTest{ 
 
    display: block; 
 
}
<div class="MeTest" style="display: block;"></div> 
 
<div class="testThis" style="float: right;"></div> 
 
<div class="haveIt" style="position: fixed; top: 200px;"></div>

PS: Ich änderte den Wert von oben von 400px zu 200px, um zu sehen, wenn Sie den Code-Schnipsel aus.

aktualisieren

Ich sehe, dass über Aussagen in meine erste Frage, die Sie Anzeige geändert im HTML-DOM zu blockieren - Wenn ich dieses Element im Stylesheet Css aufrufen und die Anzeige ändern Block, es funktioniert nicht so. Irgendwelche Gedanken, warum es passiert?

Es funktioniert nicht, da die Anzeigeeigenschaft des Elements durch das Stylesheet auferlegt ist, es ist nicht ein Wert im style-Attribut des HTML-Elements enthalten. Das können Sie in diesem Fall tun, um getComputedStyle Methode wie im folgenden Snippet zu verwenden.

var x = document.getElementsByClassName("MeTest"); 
 
var display = window.getComputedStyle(x[0],null) 
 
        .getPropertyValue("display"); 
 
if (display == 'block'){ 
 
    document.getElementsByClassName("haveIt")[0].style.backgroundColor = "red"; 
 
}
#MeTest{ 
 

 
    position: fixed; 
 
    height: 200px; 
 
    width: 200px; 
 
    background-color: #fdacc3; 
 

 
} 
 

 
div{ 
 
    background: #4dd329; 
 
    border: 1px solid white; 
 
    height: 200px; width: 200px; 
 
    display: block; 
 
} 
 

 
.MeTest{ 
 
    display: block; 
 
}
<div class="MeTest"></div> 
 
<div class="testThis" style="float: right;"></div> 
 
<div class="haveIt" style="position: fixed; top: 200px;"></div>

Für Informationen in Bezug auf die Window.getComputedStyle einen Blick Sie [hier]. 1

+0

Das ist perfekt Christos! Vielen Dank! – Rehan

+0

Schnelle Fragen: Können wir die Css-Eigenschaft mehrerer Elemente mit dieser Methode ändern? Beispiel: Wenn ich mehrere Elemente (fast 9 Elemente) innerhalb des Klassenelements "MeTest" und dann in J Script die Farbe von nur 5 Elementen dieses Arrays ändere? Dies wäre sehr hilfreich - Vielen Dank im Voraus! – Rehan

+0

Ja, das kann gemacht werden. Sie sollten über CSS-Selektoren lesen, um zu sehen, wie wir die untergeordneten Elemente eines übergeordneten Elements auswählen. Zum Beispiel, wenn Sie alle Absatzelemente in einem div greifen möchten, könnten Sie etwas wie dieses tun 'document.querySelectorAll (" div> p "); '. Wenn Sie alle Absatzelemente in einem div mit der Klasse MeTest erfassen möchten, können Sie dieses 'document.querySelectorAll (" div.MeTest> p ");'. Weitere Informationen zu dieser Methode, "querySelectorAll", finden Sie hier https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelectorAll. – Christos

0
var x = document.getElementsByClassName ("MeTest") [0]; if (getComputedStyle (x) .getPropertyValue ("display") == 'block') { document.getElementsByClassName ("haveIt") [1] .style.backgroundColor = "red"; }
+0

Eigentlich haben Sie ein div der Klasse "haveIt". Daher sollten Sie 'document.getElementsByClassName ("haveIt") [0] .style.backgroundColor = "red";' anstelle von 'document.getElementsByClassName ("haveIt") [1] .style.backgroundColor = "red";' –

+0

Das ist ein guter Vorschlag Sumit - Mit ComputeredStyle wäre eine gute Idee. Danke! – Rehan