2011-11-17 62 views
0

我遇到了分配类和隐藏和显示td的问题。 这里是我的HTML:JQuery - 隐藏()和addClass冲突

<table id="fundTable"> 
    <tr> 
     <td class="rentability"> <span class="someClass"> 0.12 </span> </td> 
     <td class="absoluteResult">0.66</td> 
    </tr> 
    <tr> 
     <td class="rentability"> <span class="someClass"> -0.24 </span> </td> 
     <td class="absoluteResult">-.45</td> 
    </tr> 
</table> 

这里是我的Javascript(平变化):

$('#fundTable tr').each(function() { 
    formatedAbsoluteResult = 'SOME NUMBER' 
    $(this).find('td[class=absoluteResult]').fadeOut(100).html(formatedAbsoluteResult).fadeIn(100) 
    if (formatedAbsoluteResult < 0) 
     $(this).find('td[class=absoluteResult]').removeClass('green').addClass('red') 
    else 
     $(this).find('td[class=absoluteResult]').removeClass('red').addClass('green') 
} 

的想法是显示绿色的数量,如果它是积极的,通过分配适当的类。否则红色。当我在页面加载时运行它时,此代码完美工作。然后,不更新td的是有一个指定的类(red或​​)了(平变化),而其余的都在:

$(this).find('td[class=absoluteResult]').fadeOut(100).html(formatedAbsoluteResult).fadeIn(100) 

我不理解这种行为。任何帮助不胜感激。

+0

“onchange”是什么意思? onchange事件仅适用于字段元素,即:input,select,textarea – Sinetheta

回答

1

我觉得这个区块的整体设计略有调整会有帮助。

这似乎是做你正在尝试完成(live demo at jsFiddle)。不要忘记更改部分,我即兴:

$("#testing").keyup(function() { 
    $("#fundTable tr").each(function() { 
     formattedAbsoluteResult = 
     $(this).find("td.absoluteResult").fadeOut(100, function() { 
      if (formattedAbsoluteResult < 0) 
      { 
       $("#fundTable tr").find("td.absoluteResult").removeClass("green").addClass("red"); 
      } 
      else 
      { 
       $("#fundTable tr").find("td.absoluteResult").removeClass("red").addClass("green"); 
      } 
     }).html(formattedAbsoluteResult).fadeIn(100); 
    }); 
}); 

通知使用的回调函数,也是“KEYUP”而不是“平变化”,但你可以使用任何你所需要的。希望这可以帮助。

+0

非常感谢。 我一步一步地应用了你的修改,实际上最终只通过** td.someClass **代替所有的** td [class = someClass] **来解决问题,现在它工作得很好。 你知道我为什么得到这种行为吗? 无论如何,感谢很多,因为它看起来很愚蠢,我没有想到尝试这样的变化:) –

+1

我不完全确定,但类的点符号只是更短,所以我用它。我唯一的猜测是浏览器兼容性或jQuery版本的差异?好吧,无论如何,很高兴你的工作! – Matt