代码之家  ›  专栏  ›  技术社区  ›  Topher Fangio

jquery-修改元素的悬停css

  •  0
  • Topher Fangio  · 技术社区  · 16 年前

    我正在创建一个可动态更改当前页面的自定义网站页面,以便您可以预览正在更改的内容。除了我正在使用的代码显然不能处理伪类(如 :hover :visited .

    代码非常简单,我主要做以下工作:

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

    但是,这并没有设置 <a> 标签的悬停颜色为 #ff0000 .如果我把 悬停 不过。有人对如何让这个工作有什么建议吗?

    非常感谢!

    编辑1: 很明显,我可能完全弄错了。一些更多的信息显示我可能可以使用 document.styleSheets.inlinestyle.rules 修改它,尽管这显然只在IE中有效。任何更多的想法都会受到极大的赞赏。

    5 回复  |  直到 16 年前
        1
  •  6
  •   Lior Cohen    16 年前
    $('#links td.active a').hover(
      function()
      {
        $(this).data('prevColor', $(this).css('color')).css('color', '#FF0000');
      },
      function()
      {
        $(this).css('color', $(this).data('prevColor'));
      });
    
        2
  •  1
  •   Joel    16 年前

    一个有趣的方法可能是使用类似插件的 jQuery.Rules .

        3
  •  0
  •   jthompson    16 年前

    这不起作用的原因是$(“links td.active a:hover”)与psuedo类“hover”匹配元素,此时该类将为无。您需要添加一个事件来执行此操作,如lior的答案。

    $(“links td.active a”).hover();

        4
  •  0
  •   Topher Fangio    16 年前

    好吧,我终于想出了如何让它按我想要的方式工作。基本代码如下:

    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 是隐藏输入的值。虽然我不太喜欢这种方法,但它似乎能完成工作。

        5
  •  -1
  •   danielkza    16 年前

    您可以将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); }
    );
    

    如果您有多个需要更改的属性,它会更好地工作。