2011-10-02 184 views
0

每次my_div recive class'selected'时,我都想改变背景颜色。 到目前为止,我得到这个:如何在jQuery中使用if语句

$(document).ready(function() { 
    if ($('#my_div').hasClass('selected')) { 
     $("body").css({backgroundColor: '#111'}); 
    } 
}); 

,但它不工作。

怎么了?

+2

你能说明它是如何接收这个类的吗? –

+1

如果你使用jQueryUIs'selectable',我会倾听'selectableselected'事件。 –

+1

你在寻找['.live()'](http://api.jquery.com/live/)或['.delegate()'](http://api.jquery.com/delegate/) ? –

回答

2
I want to change background color each time when my_div recive class 'selected'. 

有一块这是给你的元素selected类代码。这段代码有效地将您的元素的class更改为class = "whatever classes previously existed insertednewclass"。做你想做什么

的一种方法,就是找到它添加/删除类的功能,并连接它,例如:

myFunction = function(...) { 
    $('#my_div').addClass('selected'); 
    // add more code 
    $('#my_div').css({backgroundColor:...}); 
} 

我假设你的情况是不像这样简单。但是,即使函数位于外部库中,这也是可能的,但是如果库改变了它的内部行为,那么这是有风险的。

// some.function is the function which adds the "selected" class 
var oldFunction = some.function; 
some.function = function() { 
    return oldFunction.apply(this, arguments); 
} 

如果你不能做到这一点,必须被动地检测出类属性修改,你可以使用在非IE浏览器隐约支持弃用的DOM 2级突变事件http://www.w3.org/TR/DOM-Level-3-Events/#events-mutationevents。您可以通过jQuery中的$.bind查看它是否受支持;如果它在jQuery中不受支持,则可以使用your_element.addEventListener(...)这是本地方式来执行任务(基本上,jQuery正在使用的所有内容)。

1

您可以创建一个自定义事件,当选定的类被设置或删除时,该事件将被触发。

例如

$(document).ready(function() { 
    $('#my_div').live('myDivChangedState', function(event) { 
     if($(event.target).hasClass('selected')) { 
      ... 
     } 
    }); 
}); 

而不仅仅是触发事件:

$('#my_div').addClass('selected').trigger('myDivChangedState'); 
-- OR -- 
$('#my_div').removeClass('selected').trigger('myDivChangedState');