覆盖悬停元素中的悬停样式

时间:2011-12-13 16:40:49

标签: javascript css hover uppercase

我有一个CSS类

.uppercase:hover { text-transform: uppercase; }

因此,每当我使用它时,文本都会变换,但在少数情况下,我希望其中的一些文本不会被大写。 (取消.uppercase:hover)。例如:

Abc cake smurf cafe Zzz - > ABC CAKE smurf CAFE ZZZ

我想用JavaScript而不是CSS来做这件事。

更新

Abc cake (smurf) cafe Zzz - > ABC CAKE smurf CAFE ZZZ

2 个答案:

答案 0 :(得分:2)

在悬停时覆盖您不希望大写的项目的文本转换值。

使用jQuery:

$(".uppercase").each(function(){
    // wrap case-insensitive occurrences of the words smurf, blue, and stuff
    // with a span that cancels the affect of the inherited text-transform property
    // from its ancestor's `uppercase` class.
    this.innerHTML = this.innerHTML.replace(/(smurf|blue|stuff)/ig, "<span style='text-transform:none;'>$1</span>");
});

答案 1 :(得分:0)

回答你对问题的最后评论:是的,如果你可以使用一些保留字符,你可以毫不费力地实现这一点:

http://jsfiddle.net/LH7sy/8

<a class="uppercase" href="#">everything uppercase, except (this) word</a>


$(document).ready(function () {
     $('.uppercase').each(function() {
        var end = false;
        var s = $(this).html();
        while(end == false) {
            var p1 = s.indexOf('(');
            var p2 = s.indexOf(')');
            if (p1 != -1) { /* if '(' is found in the string */
                var result = s.substring(0,p1);
                result += '<span style="text-transform:none">';
                result += s.substring(p1+1,p2);
                result += '</span>'                        
                result += s.substr(p2+1);
                s = result;
            } else {
                end = true;
            }
        }
        $(this).html(result);
    })
})