【问题标题】:Jquery Changing CSS class of object based on numeric contentJquery根据数字内容更改对象的CSS类
【发布时间】:2011-06-23 04:55:36
【问题描述】:

将动态输出百分比 0-100%

想要添加基于百分比的 CSS 类。红色表示 0%,蓝色表示 100%。

标记将是

<span class="blue">100%</span>

本来我是这么想的……

$("span:contains('100%')").css("color", "#0000ff");

但仅包含搜索第一个整数并为 1、2、3、4、5、6、7、8、9 应用不同的类 这种方法的唯一问题是单个数字将被视为与双数字相同。 IE 7% 和 70% 将具有相同的类并且不正确。

这些不是特定的数量,它们会一直动态变化。我不太擅长编写自己的 jquery,因此不胜感激。

【问题讨论】:

  • 我不明白这个问题。不管用于创建它的代码是什么,对于 0% 或 100% 以外的值,您期望什么输出?假设我们有 70%:应该类名是什么样的?
  • 这是用另一种语言编写的 - PHP、ASP...等吗?还是直接 HTML?
  • 我在 Firefox 4 和 IE 9 中尝试了我认为您在 jsfiddle jsfiddle.net/PPwEq 中描述的内容,但我没有看到任何问题......也就是说,如果我理解了这个问题正确,我不确定我有...

标签: javascript jquery html css


【解决方案1】:

演示: http://jsfiddle.net/JAAulde/GJh3j/

如果页面上有很多元素,包含将是一个非常昂贵的查询。 我会:

为所有元素添加一个类:

<span class="percent-holder">100%</span>
<span class="percent-holder">100%</span>
<span class="percent-holder">0%</span>
<span class="percent-holder">100%</span>

找到所有这些元素,分析它们的文本,做你想做的事:

$( '.percent-holder' ).each( function()
{
    var $this = $( this ),
        classToAdd = null;

    switch( $this.text() )
    {
        case '100%':
            classToAdd = 'blue';
            break;

        case '0%':
            classToAdd = 'red';
            break;
    }

    if( classToAdd !== null )
    {
        $this.addClass( classToAdd );
    }
} );

【讨论】:

  • 为什么变量名$this前面有一个$
  • 因为经过 jQuery 工厂 ($( this )) 运行后是 this。可以命名任何东西。我就是喜欢那种特别的风格。
  • 明白了。不确定这是否是命名约定,或者是否有任何特殊含义。谢谢
【解决方案2】:

我认为使用:contains() 没有任何问题(请参阅http://jsfiddle.net/b3tUf/),但是如果您想更改代码,您总是可以只使用条件语句。

if( $("span").text() == "0%" ) {
    $("span").css("color", "#0000ff");
} elseif ( $("span").text() == "100%" ) {
    ...
}

或者对于类:

if( $("span").text() == "0%" ) {
    $("span").removeClass().addClass("red");
} elseif ( $("span").text() == "100%" ) {
    $("span").removeClass().addClass("blue");
}

【讨论】:

    【解决方案3】:

    如果你想自己手动管理百分比颜色,你可以这样做:

    $('span').css('color', function() {
     var percentage = parseInt($(this).text());  
        switch(percentage){
            case 100:
              return "red";
            case 90:
              return "gray";                 
        }
    });
    

    示例:http://jsfiddle.net/niklasvh/zqwqe/

    编辑:或者您可以动态计算颜色值,因此您不必单独定义每个百分比。

        $('<span />').appendTo($('body')).text(i+"%").css('color', function() {
            var percentage = parseInt($(this).text());  
            var colors = [Math.round(255*(percentage/100)),0,255-Math.round(255*(percentage/100))];
            return "rgb("+colors+")";   
            });
    

    示例: http://jsfiddle.net/niklasvh/zqwqe/29/

    【讨论】:

    • 如果文本是100%,则 parseInt 可能无法为您完成这项工作。
    • @Wex 100 是整数吗?在示例中它似乎工作正常。您能否详细说明为什么它不起作用?
    • 我的错误,我太习惯于使用 C++ 来得出这样的结论。
    • @Wex 我不否认它可能是这种情况,我只是不明白它为什么会这样做。 C++中的字符串不是包含“100%”,当解析为整数时,也是100?
    猜你喜欢
    • 2019-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-29
    • 2010-11-04
    • 1970-01-01
    • 2021-10-27
    • 2012-02-23
    相关资源
    最近更新 更多