【问题标题】:Set the text selection color with jQuery. Demo not working使用 jQuery 设置文本选择颜色。演示不工作
【发布时间】:2012-01-18 09:49:15
【问题描述】:

http://jsfiddle.net/uKdPM/

我在 css 中设置了::selection 颜色,所以当你在屏幕上突出显示文本时,文本的颜色是粉红色的。我现在试图在页面加载时通过 jQuery 覆盖该颜色。似乎它应该超级简单。但这对我不起作用。

【问题讨论】:

  • 它不会发生,因为 jquery 找不到 p::selection,你可以捕获 p 本身,但我不确定如何将样式实际应用于这样的伪类
  • 与问题无关,但我相信 ::selection 已从 CSS3 规范中删除,因此请谨慎使用。

标签: jquery css colors selection textselection


【解决方案1】:

::selectionCSS 伪类,而不是 jquery 选择器!

您不能这样做$('p::selection').css({color: "#3c3"}) 并期望更改文本选择颜色。


  • $(<selector>) 允许您以灵活的方式选择 dom 元素,使用 ID、css 类、属性...

  • :hover, :after...::selection 是 CSS 伪选择器,允许您对元素进行样式

尽管 jquery 选择器的语法看起来与伪类 css 相同,但它们是不同的。


顺便说一句,不能以编程方式更改 css 伪类的样式(如 :hover...)。

【讨论】:

  • 实际上,您可以这样做并期望更改文本选择的颜色...它不会起作用,但我确实做到了,并且预期它...您知道。
【解决方案2】:

我相信如果你想达到这种效果,你需要应用基于 CSS 类的颜色变化。我分叉了你的 jsfiddle,和heres the result

虽然我认为您的问题很有趣,但我很难确定可以将其付诸实践。您想即时更改主题吗?

【讨论】:

  • 我的用例:我正在考虑为我正在构建的网站上的每个“文章”设置不同的颜色。它们更像是书而不是文章,更长,所以我在考虑这种可能性。我仍然不确定这是否是我想做的事情。
  • 我不会向你推荐它,老实说,我认为它很俗气,很容易让人很烦。
【解决方案3】:

根据question,您无法更改选择的突出显示颜色,因为没有用于操作伪类的 DOM 接口。你可以做的是改变元素的类。

【讨论】:

    【解决方案4】:

    如果您可以change to using classes 而不是直接从 JavaScript 设置颜色,那么就这样做,因为它更简单。

    否则,看这个问题:Setting CSS pseudo-class rules from JavaScript

    使用this answer中提供的库:

    jss('p::selection', {
        color: '#3c3'
    });
    

    http://jsfiddle.net/thirtydot/uKdPM/9/

    【讨论】:

      【解决方案5】:

      我有同样的问题,我偶然发现了这个问题。解决方案可以是在文档正文中添加一个带有 css 属性的<style> 标签。

      $('<style> p::selection{ background-color:#000; } p::-moz-selection{ background-color:#000; }</style>').insertAfter('body *:last');

      这可能不是最优雅的方式,但至少它有效。

      【讨论】:

        猜你喜欢
        • 2011-04-14
        • 1970-01-01
        • 2012-08-18
        • 1970-01-01
        • 2011-12-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多