Подтвердить что ты не робот

Селектор hover CSS для фонового цвета не работает после динамического изменения фонового цвета с помощью jquery

Я динамически меняю цвет фона div с помощью метода jquery .css(). Я также хочу иметь селектор CSS hover на том же div, который меняет цвет фона. По-видимому, перед изменением цвета с помощью jquery работает селектор CSS hover, но после изменения div с помощью метода jquery селектор CSS hover больше не работает. Есть ли способ обойти это (без использования метода jquery hover)?

Это пример того, о чем я говорю: http://jsfiddle.net/KVmCt/1/

4b9b3361

Ответ 1

Проблема, с которой вы столкнулись, заключается в важности расположения информации CSS:

Внешняя таблица стилей переопределяется CSS в начале документа; который, в свою очередь, чрезмерно управляется CSS в атрибуте style элемента. В основном, последний стиль, используемый браузером, отменяет любые ранее заданные и в противном случае конфликтующие правила (если не используется ключевое слово !important).

В качестве JavaScript и, следовательно, jQuery помещает его информацию о стилях CSS/в атрибут style в строке, который всегда перекрывает конфликтующие стили, указанные в другом месте.

Места более важны для color: red для div, не считая стилей div:hover.

Чтобы обойти это, вы можете использовать:

div:hover {
    background-color: blue!important;
}

JS Fiddle demo.

Лучшее решение, однако, состоит в том, чтобы избежать назначения background-color/других стилей с помощью jQuery и просто использовать CSS:

div {
    background-color: red;
}

div:hover {
    background-color: blue!important;
}

В качестве альтернативы вы можете использовать метод jQuery hover():

$('div').css('background-color','red').hover(
    function(){
        $(this).css('background-color','blue');
    },
    function(){
        $(this).css('background-color','red');
    });

JS Fiddle demo.

Ответ 2

Метод jquery css добавляет встроенный стиль к вашим элементам, а это означает, что после его выполнения ваш div будет выглядеть как

<div style="background-color: red">Hello world</div>`

Теперь встроенный стиль всегда имеет больше приоритета, чем стиль CSS, поэтому ваша проблема.

Итак, почему бы не добавить класс css вместо использования встроенного стиля? Попробуйте следующее:

$("div").addClass("edited");

и

div:hover, div.edited:hover {
   background-color: blue;
}

div.edited {
   background-color: red;
}

и вы увидите, что он работает.

Ответ 3

Когда вы манипулируете css с jQuery, он добавляет его inline и переопределяет любой css в таблице стилей, используя jquery для добавления и удаления класса, который изменяет цвет при наведении. Здесь рабочая скрипка: http://jsfiddle.net/KVmCt/6/

jQuery выглядит следующим образом:

$("div").hover(
function(){
$(this).addClass("blue");
 }
,
function(){
$(this).removeClass("blue");
});

Ответ 4

если вам просто нужно удалить встроенный стиль, который вы можете использовать

$("#yourselector").attr("style", " ");

Он заменит ваш встроенный стиль style=" "

Ответ 5

Простым способом было бы добавить важный тег в ваш CSS.

div:hover {
    background-color: blue !important;
};