Javascript jQuery hasClass()方法未返回正确的值 你好

Javascript jQuery hasClass()方法未返回正确的值 你好,javascript,jquery,html,Javascript,Jquery,Html,我试图改变元素及其子元素的背景色,因此我编写了一个递归调用的函数。 以下是一些条件,如果元素具有属性class=“irmNDrdnVal”或id=“irmNDatePickerContainer”,则不应更改元素的背景色 代码如下: <!DOCTYPE HTML PUBLIC> <html> <style> .newClass{ color:red; background:green; } </style> <script

我试图改变元素及其子元素的背景色,因此我编写了一个递归调用的
函数。

以下是一些条件,如果元素具有属性
class=“irmNDrdnVal”
id=“irmNDatePickerContainer”
,则不应更改元素的背景色

代码如下:

<!DOCTYPE HTML PUBLIC>
<html>
<style>
 .newClass{
  color:red;
  background:green;
 }
</style>
  <script type="text/javascript" src="http://code.jquery.com/jquery-1.7.1.js"></script>
  <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.js"></script>
<body>
<div id="main">
  <span id= "drdn-box-ACNT" class="irmNDrdnInputBox" disabled= "true">
      <input id="drdn-ip-ACNT" class="irmNDrdnInput" readOnly="readOnly" value="1 IA" type="text">
      <span><img src="/sap/bc/bsp/sap/public/drdn-btn.gif"></span>
  </span>
  <div id= "drdn-val-ACNT" class="irmNDrdnVal">
        <div>
            <ul>
                <li disabled= "true" key= "">&nbsp;</li>
                <li disabled= "true" key= "1">1 IA</li>
                <li disabled= "true" key= "2">2 PB &amp; CB</li>
                <li disabled= "true" key= "3">3 DM-P</li>
                <li disabled= "true" key= "4">4 DM-R</li>
                <li disabled= "true" key= "5">5 Cash App</li>
            </ul>
        </div>
  </div>
</div>


<script>
  function changeBgColor(_ele,_cls,_remove){
    if(_remove){
     _ele.removeClass(_cls);
    }
    else{
     if(!_ele.hasClass('ui-resizable-handle') && !_ele.hasClass('irmNDrdnVal') && _ele.attr('id') != 'irmNDatePickerContainer'){
         _ele.addClass(_cls);
     }
    }
    if(_ele.children().length > 0 && !_ele.hasClass('irmNDrdnVal') && _ele.attr('id') != 'irmNDatePickerContainer'){
      changeBgColor(_ele.children(),_cls,_remove);
    }
  }

 $('div#main').each(function(){
   changeBgColor($(this),'newClass',false);
 });

</script>
</body>
</html>
虽然它没有类
'irmNDrdnVal'
,但是
hasClass('irmNDrdnVal')
方法为元素返回
true

我无法理解为什么会出错


有人能帮我一下吗……提前谢谢……

嗯,代码不可读,但我想问题出在这里:

changeBgColor(_ele.children(), _cls, _remove);
如果将所有子元素传递给changeBgColor,则所有子元素都将位于_ele(这是jQuery元素集),如果只有一个子元素具有类irmNDrdnVal,则整个集合的_ele.hasClass('irmNDrdnVal')将返回true。试着像这样改变它

_ele.children().each(function(){
   changeBgColor($(this), _cls, _remove);
})

另外,为了调试的目的,尽量使代码更具可读性;)

幸好您保持了它的简单易读,并简短地描述了ID和类。使查找错误变得更容易?您是否尝试过只执行
\u ele.not('.irmNDrdnVal')
@adeneo这是什么意思?它返回的是一个对象,而不是布尔标志。当然是,我的错,我想的是相反的
(!\u ele.is('.irmNDrdnVal'))
@adeneo\u ele.is('.irmNDrdnVal')也返回
true
。我会投赞成票,因为这似乎是合理的!看起来这个函数只是在传递#main,为什么任何人都需要循环ID,而ID应该是唯一的,这是另一个问题,但是我没有注意到这个函数在一个循环中调用自己,所有子函数都在传递。另一方面,谁知道呢,因为整个脚本是完全不可读的,有很长很奇怪的类和几乎不可能读取的if/else语句。
_ele.children().each(function(){
   changeBgColor($(this), _cls, _remove);
})