Javascript 替代悬停元素中的悬停样式

Javascript 替代悬停元素中的悬停样式,javascript,css,hover,uppercase,Javascript,Css,Hover,Uppercase,我有一个CSS类 .uppercase:hover { text-transform: uppercase; } 因此,每当我使用它时,文本都会转换,但在少数情况下,我希望其中的一些文本不会大写。(取消。大写:悬停)。例如: Abc蛋糕蓝精灵咖啡馆Zzz->Abc蛋糕蓝精灵咖啡馆Zzz 我想用JavaScript而不是CSS来实现这一点 更新: Abc cake(smurf)cafe Zzz->Abc cake smurf cafe Zzz覆盖不希望悬停时大写的项目的文本转换值 使用jQuer

我有一个CSS类

.uppercase:hover { text-transform: uppercase; }
因此,每当我使用它时,文本都会转换,但在少数情况下,我希望其中的一些文本不会大写。(取消
。大写:悬停
)。例如:

Abc蛋糕蓝精灵咖啡馆Zzz
->
Abc蛋糕蓝精灵咖啡馆Zzz

我想用JavaScript而不是CSS来实现这一点

更新:


Abc cake(smurf)cafe Zzz
->
Abc cake smurf cafe Zzz

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

使用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>");
});
$(.uppercase”)。每个(函数(){
//对单词smurf、blue和stuff的出现不区分大小写
//具有取消继承的文本转换属性影响的范围
//来自其祖先的大写类。
this.innerHTML=this.innerHTML.replace(/(smurf | blue | stuff)/ig,“$1”);
});

在回答您对问题的最后一条评论时:是的,如果您可以使用一些保留字符,您就可以轻松实现这一点:


$(文档).ready(函数(){
$('.uppercase')。每个(函数(){
var-end=false;
var s=$(this.html();
while(end==false){
var p1=s.indexOf('(');
var p2=s.indexOf(');
如果(p1!=-1){/*如果在字符串中找到了“(”*/
var结果=s.子串(0,p1);
结果+='';
结果+=s.子串(p1+1,p2);
结果+=“”
结果+=s.substr(p2+1);
s=结果;
}否则{
结束=真;
}
}
$(this).html(result);
})
})

您能对这些“少数情况”进行一些扩展吗?哪些情况下不需要大写?例如引号、用户名、日期和时间。这应该是可能的,但您需要一个精确的元素列表,您希望保持小写,并编写规则来查找所有这些元素。根据您的元素列表,这可能会成为一个非常复杂的com复杂的脚本…所以你是说我需要一个元素列表,这些元素应该可以逃逸效果。嗯!使用一个特殊字符(或一组字符)怎么样这表示不应该在哪里使用大写字母,例如“~”。这可能吗?如果我理解正确,OP正在寻找排除.uppercase元素中某些单词的答案('示例中的smurf'))请您解释更多更新以取消对元素中特定单词的影响。Thx对于您的代码,它回答了我原来的问题,但是:)您能更新它吗?使用特殊字符取消效果。类似于
我是大的,^i是小的^
->
我是大的,我是小的
对不起,我不会做这种事。按照这些思路做事通常是不好的做法,我不打算鼓励这种做法。如果您已经可以编辑HTML本身,为什么还需要JavaScript?把你不想用大写字母写的单词用
span
@DavidMurdoch包装一下,我不是javascript专家,相反,也许你想进一步说明是什么让你感到奇怪,并且更具建设性一点?你之前的评论对我和其他人都没有帮助。这就是这个网站的重点,不是吗?:)只有一个问题。当页面加载时,文本将全部大写,除了(this)单词而不是全部大写,除了这个单词:(鼠标悬停后特殊字符消失,很抱歉,但整个内容都是糟糕的形式:$(“a”).html()而不是$(this).html(),选择器没有缓存,所有变量都被抛出到全局范围中像这样替换“保留”字符没有任何意义,等等。我的答案是一种更好的方法。@Fakerainbrigan您的
var s
版本仍然将
result
变量泄漏到全局范围。我更新了我的答案,包括@DavidMurdoch的备注(+1),很高兴学到了一些东西).正如在David的回答中所看到的,我将代码移到了.uppercase选择器,而不是:hover-因为这没有太多意义。
<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);
    })
})