【问题标题】:pseudo elements work for javascript伪元素适用于 javascript
【发布时间】:2016-04-21 19:50:09
【问题描述】:

大家好,大家正在开发一个名为 colpick 的颜色选择器, 我正在使用 .css() 来更改不同元素的颜色,并且我在我的 js 中反复使用相同的 .css() a 并且元素更多所以我开始 var 元素并为它们使用 var 类似这样的东西

var colorElement = "a, upper"
$(colorElement).css('color', '#' + hex);

但我也想在悬停时编辑元素的颜色/样式,然后当我尝试使用 :hover 或 :link 或 :focus 或 active 等添加元素时

var colorElement = "a:hover, upper:focus, headline:active, bar, footer"
$(colorElement).css('color', '#' + hex);

然后它停止工作(那些伪包含元素不起作用) 那么知道如何使用它们吗?

问候,

【问题讨论】:

  • 你有没有试过强制important覆盖其他样式? $(colorElement).css('color', '#' + hex + ' !important');
  • 你不能这样修改伪元素的样式,因为它们不在 DOM 中。您可以在元素上添加/删除类(或其他属性),然后创建影响伪元素的 CSS 规则。您还可以动态创建 CSS 规则(即更新<style> 元素内容)。

标签: javascript


【解决方案1】:

jQuery 不会创建 CSS 规则,它只会改变当前的 DOM。因此,要在悬停、聚焦等之后更改 CSS 样式,您必须添加可以更改它的方法。

how-to-define-the-css-hover-state-in-a-jquery-selector

$(".myclass, .myclass2").hover(function(e) { 
    $(this).css("color",e.type === "mouseenter"?"red":"transparent") 
})

更新:看看CSSX可以动态改变CSS样式:

var sheet = cssx();
var rule = sheet.add('a:hover, upper:focus, headline:active, bar, footer');
var setColor = function (hex) {
   return { 'color': '#' + hex };
};

//...

rule.update(setColor('ff0000'));

【讨论】:

  • 但这只对悬停有利可图,如果我确实喜欢其他人,那么 js 的大小可能会变得更大一些,因为我必须多次使用相同的一堆元素,并且每次悬停都处于活动状态,链接等我必须创建一个新功能。你知道有什么方法可以让所有包含伪元素的元素一次性完成吗?
  • @HMR 您可以使用多个选择 $('el1, el2, el3, ...') 并且您可以为更多事件注册处理程序 $(...).on('event1 event2 event3 ...', function() {...})。但这不是 jQuery 设计的,所以期待很多混乱的方法......您也可以尝试使用自定义属性 (body.style.setProperty('--color', newValue)) 或文档样式表 (document.styleSheets[0].cssRules) 更改 CSS,但它不适用于所有浏览器。
  • @HMR 看看github.com/krasimir/cssx。它可能是您正在寻找的。​​span>
猜你喜欢
  • 2021-07-31
  • 1970-01-01
  • 2015-11-10
  • 1970-01-01
  • 2019-04-13
  • 2013-10-09
  • 2018-04-29
  • 2021-12-26
相关资源
最近更新 更多