2016-04-04 9 views
6

Hier ist ein Beispiel: https://jsfiddle.net/6kg43qfr/Warum verwendet jquery css background.color entfernen: Hover?

Code:

JQuery:

$('#foo').css('background-color', '#f8f7f7'); 

Html:

<div id="foo"> 
test 
</div> 

CSS:

#foo:hover{ 

    background-color: red; 

} 

Frage: Warum funktioniert der Hover nicht?

+2

Es wird nicht ': hover' entfernt. jQuery 'css' Methode fügt ** inline css ** hinzu. Dies ist wichtiger als Klasse oder ID, also wird ': hover' ignoriert. – klauskpm

+0

Wie komme ich dazu? –

+0

Meine Frage hier ist: Willst du einfach 'herumkommen' und ein Stück Scheiß-Code schreiben oder einen wartbaren Code haben, der in Zukunft wiederverwendet und verbessert werden kann? –

Antwort

3

Das ist, weil Sie die Farbe in Ihrem JavaScript-Code festlegen. Inline-Stile hat mehr Priorität als Stile für Klassen oder IDs

Es gibt tatsächlich viele Regeln, wie Stile ordnungsgemäß überschrieben werden. Bitte werfen Sie einen kurzen Blick auf diese http://www.hongkiat.com/blog/css-priority-level/

Ich empfehle Ihnen dringend, mehr über CSS zu lesen, bevor Sie mit dem Projekt fortfahren, um Code sauber und wartbar zu halten.

, um Ihre Bedürfnisse zu erfüllen, werfen Sie einen Blick auf diese Geige: https://jsfiddle.net/6kg43qfr/2/

$('#foo').addClass("green-background") 
+0

Wie komme ich hier zurecht? –

+0

@JakeStainer, ich habe gerade meine Antwort bearbeitet, so können Sie das tun, wenn Sie Javascript benötigen. –

+0

JakeStainer, Sie sollten den Code nicht folgen, @MdMahfuzurRahman vorgeschlagen. Dies ist ein Beispiel für einen schrecklichen, unhaltbaren Ansatz. Auch sollten Sie nicht verwenden! Wichtig für diesen Fall. Ich rate Ihnen dringend, einige 'Styling' Literatur zu lesen. –

2

Da die $('#foo').css()-Funktion den Stil in ein style-Attribut für das Element einfügt, das daher das Stylesheet überschreibt.

+0

Wie komme ich hier zurecht? –

+0

@JakeStainer Siehe Md Mahfuzur Rahmans Antwort, die funktioniert. Und ich weiß nicht, wer ihn ablehnt. –

+0

@MrLister, ich war es. Ich habe es mir in dem obigen Kommentar erklärt. –

2

Die beste Lösung ist:

#foo:hover{ 
    background-color: red; 
} 

#foo { 
    background-color: #f8f7f7; 
} 

Oder

Sie können auch verwenden:

$('#foo').css('background-color', '#f8f7f7').hover(
function(){ 
    $(this).css('background-color','red'); 
}, 
function(){ 
    $(this).css('background-color','#f8f7f7'); 
}); 
+0

Kann jemand den Grund des Downvotings erklären? –

+0

kann ich erklären. Warum schlagen Sie Jake Stainer vor, Javascript-Code zu verwenden, um Hintergrundfarbe anzuwenden, anstatt ihm beizubringen, wie man es macht? Wenn ich eine Chance haben würde, dieses Stück Code im realen Projekt zu sehen, würde ich eine ernsthafte Unterhaltung mit dieser Person haben. –

+0

Da er 'js' Code verwendet, um Hintergrundfarbe anzuwenden, schlage ich ihm auch vor, alle Änderungen mit' js' vorzunehmen. Sie schlagen ihm auch 'js' vor. Warum hat er ihm nicht vorgeschlagen, nur CSS zu benutzen? –