Ich wäre sehr überrascht, wenn jQuery 1.4.2 dies falsch macht Bei jQuery 1.4.2 ist dies nicht der Fall. hasClass("fixed")
sollte in beiden Fällen wahr sein, in allen Versionen von jQuery. Hier ein Beispiel mit v1.6.1, und das gleiche Beispiel mit v1.4.2. Beide funktionieren gut.
Wenn Sie überprüfen wollen, ob "repariert" ist, ist es die nur Klasse auf ein Element, das ist leichter getan, ohne jQuery, indem Sie direkt auf die reflektierte Eigenschaft:
if (this.className === "fixed") {
// ...
}
className
ist eine Eigenschaft, die das "class"-Attribut widerspiegelt, und wie das "class"-Attribut eine durch Leerzeichen getrennte Zeichenkette ist.
Der obige Versuch schlägt natürlich fehl, wenn das Element auch eine andere Klasse hat, wie "fixed something-else".
Wenn Sie speziell prüfen wollen, ob er "fixed" und nicht "chkCol" hat, müssen Sie das absichtlich tun:
var $this = $(this);
if ($this.hasClass("fixed") && !$this.hasClass("chkCol")) {
// ...
}
Wenn Sie dies in einem Selektor tun würden (anstatt ein bereits vorhandenes Element zu überprüfen), könnten Sie den Selektor ".fixed:not(.chkCol)"
. Aber auch wenn Sie kann dies mit einem Element tun, das Sie bereits haben, indem Sie is
ist es unnötig teuer (jQuery muss den Selektor parsen).
更新情報 : Sie haben gesagt, dass Sie die && !$this.hasClass("chkCol")
und es hat nicht funktioniert. Das bedeutet, dass etwas früher im if
Bedingung bereits das Ergebnis des Ausdrucks als Ganzes bestimmt hat und somit das Ergebnis der !$this.hasClass("chkCol")
Teil macht keinen Unterschied (und wird überhaupt nicht ausgeführt, da JavaScript die Ausdrücke kurzschließt).
Ejemplo:
var x = 1;
if (x == 1 || $this.hasClass("fixed") && !$this.hasClass("chkCol"))
In diesem Fall, weil x
es 1
nichts rechts von der ||
überhaupt in Betracht gezogen wird; der Wert des Ausdrucks ist bereits true
.
Aktualisierung 2 :
Sie haben gesagt, Sie verwenden hasClass
, aber in einem Kommentar zu einer anderen Antwort sagten Sie:
Wenn ich die $(this).attr('class') == "fixed"
und dann überhaupt nicht in die if-Bedingung gehen
Ich nehme nicht an, dass Sie das wirklich tun:
if ($(this).attr('className') == "fixed") {
// ...
}
Beachten Sie, dass es "className" und nicht "class" heißt. Wenn es das ist, was Sie tun, ist das wird nicht funktionieren auf 1.6.1, aber auf 1.4.2. Es gibt keine Attribut namens "className"; es gibt ein Attribut namens "class" und ein Eigenschaft namens "className". jQuery 1.6.x unterscheidet zwischen Attributen und Eigenschaften.
Mein obiger Code, der hasClass
funktioniert bei allen Versionen. Oder ändern Sie Ihren Code und verwenden Sie attr("class")
statt attr("className")
.
Hier ist ein Beispiel für v1.4.2 unter attr("className")
funktioniert (was sie nicht sollte). Hier ist ein Beispiel für v1.6.1 unter attr("className")
nicht funktioniert (was korrekt ist). Beide Versionen zeigen den korrekten Weg, um an das Attribut "class" zu gelangen.