5

对于标准浏览器,您可以使用以下方式更改所选文本的颜色:

div.txtArea::selection {
 background: transparent;
}

div.txtArea::-moz-selection {
 background: transparent;
}

div.txtArea::-webkit-selection {
 background: transparent;
}

但我需要用 JavaScript 来代替。

我的用户可以选择文本,然后更改颜色。当他们选择另一种颜色时,它会不断更新颜色。由于选择了文本,因此他们看不到颜色的样子。我需要将目标元素的选择样式更改为仅在颜色转换器的鼠标悬停期间透明。

我尝试了一些方法,包括:

$('div.txtArea').css({
    'selection': 'transparent',
    '-moz-selection': 'transparent',
    '-webkit-selection': 'transparent'
});

有没有办法用javascript做到这一点?

4

1 回答 1

7

没有用于操作伪类的 DOM 接口。您唯一能做的就是将规则添加到样式表中。例如:

// Get the first stylesheet 
var ss = document.styleSheets[0]

// Use insertRule() for standards, addRule() for IE
if ("insertRule" in ss) {
    ss.insertRule('div.txtArea::-moz-selection { background: transparent; }', 0);    
    ss.insertRule('div.txtArea::selection { background: transparent; }', 0);    
    ss.insertRule('div.txtArea::-webkit-selection { background: transparent; }', 0);    
}

您可以使用stylesheet.cssRules[index ].style和 IE的stylesheet.rules[index].style访问和更改规则,这会变得更复杂一些。

我没有包含使用addRule()的 IE6-8 示例,因为这些版本的 IE 不支持::selection.

于 2010-08-06T21:52:02.897 回答