jQuery - изменение элемента при наведении css - PullRequest
0 голосов
/ 01 декабря 2009

Я создаю страницу настройки сайта, которая динамически изменяет текущую страницу, чтобы вы могли видеть предварительный просмотр того, что вы меняете. Все работает довольно хорошо, за исключением того, что код, который я использую, очевидно, не может обрабатывать псевдоклассы, такие как :hover и :visited.

Код очень прост, в основном я делаю следующее:

$("#links td.active a:hover").css("color", "#ff0000");

Однако на самом деле это не устанавливает цвет наведения тега <a> на #ff0000. Это работает нормально, если я снимаю :hover, хотя. У кого-нибудь есть предложения относительно того, как заставить это работать?

Большое спасибо!

Редактировать 1: По-видимому, я могу ошибаться вообще. Некоторая дополнительная информация показывает, что я мог бы использовать document.styleSheets.inlinestyle.rules для его изменения, хотя, очевидно, это работает только в IE. Буду признателен за любые идеи.

Ответы [ 5 ]

6 голосов
/ 01 декабря 2009
$('#links td.active a').hover(
  function()
  {
    $(this).data('prevColor', $(this).css('color')).css('color', '#FF0000');
  },
  function()
  {
    $(this).css('color', $(this).data('prevColor'));
  });
1 голос
/ 01 декабря 2009

Интересным подходом может быть создание новых правил с помощью плагина, например jQuery.Rules .

0 голосов
/ 01 декабря 2009

Ну, я наконец-то понял, как заставить это работать так, как я хотел. Вот основной код:

function updatePageCSS(input, color) {
  $('style.new_css_styles').remove();

  var new_css_styles = "<style class='new_css_styles'>";

  $('input.colorPicker').each(function() {
    var id = $(this).attr('id');
    var selector = $('#' + id + '_selector').val();
    var attribute = $('#' + id + '_attribute').val();
    var new_color = color;

    if ($(this).attr('id') != $(input).attr('id')) {
      new_color = $(this).val();
    }

    new_css_string += selector + ' { ' + attribute + ': ' + new_color + ' }\n';
  });

  new_css_styles += "</style>";

  $('head').append(new_css_styles);
}

Обратите внимание, что selector и attribute являются значениями скрытых входов. Хотя мне не очень нравится этот подход, похоже, он выполняет свою работу.

0 голосов
/ 01 декабря 2009

Вы можете поместить CSS в другой класс и добавлять его к элементам, когда пожелаете.

#links td.active a:hover { color: #yourdefaultcolor; }
#links td.active a.preview:hover { color: #ff0000; }

Используйте что-то подобное в JavaScript:

$('#links td.active a').hover(
  function(){ $(this).toggleClass("preview", true);  },
  function(){ $(this).toggleClass("preview", false); }
);

Это работает лучше, если у вас есть более одного атрибута, который нужно изменить.

0 голосов
/ 01 декабря 2009

Причина, по которой это не работает, состоит в том, что $ ("# links td.active a: hover") сопоставляет элементы с классом psuedo "hover", которого в то время не будет. Для этого вам нужно добавить событие, например, ответ Лиора.

$ ("# links td.active a"). Hover ();

...