如果在选择器中找到一个元素,为什么我不能在Jquery中添加一个类名?

时间:2012-04-12 16:37:02

标签: javascript jquery class jquery-mobile

我很遗憾... ...

我有一个带有三个面板的容器,我需要为所有这些面板添加一个类。如果我像这样做一个选择器:

   $('#container').find('div:jqmData(role="panel")').length;

Firebug告诉我,这是三个面板,但是当我将鼠标悬停在源代码上时,一个面板没有突出显示,高度为0。

如果我在以下行中执行此操作:

   $('#container').find('div:jqmData(role="panel")').addClass("HELLO");

这个元素,尽管发现,但没有得到“HELLO”这个类。另外两个元素得到一个“HELLO”类

我现在想知道这是怎么回事,因为控制台就在addClass之前,所以如果找到三个元素,为什么只有两个元素得到“HELLO”?另外,在分配类时,元素的高度应该是无关紧要的,不应该吗?

我有W3C-ed的来源。一切都好。这是简要版本:

<div data-role="page" id="container">
    // one
    <div data-role="panel" data-panel="menu">
        <div data-role="page" id="menu_first">                                
               <p>Menu Lorem Ipsum</p>                              
        </div>       
    </div>
    // two
    <div data-role="panel" data-panel="mid">
        <div data-role="page" id="mid_first">                
             <p>Mid Lorem Ipsum</p>                             
        </div>       
    </div>
    // three
     <div data-role="panel" data-panel="main">
        <div data-role="page" id="main_first">                
             <p>Main Lorem Ipsum</p>                             
        </div>       
    </div>
</div>

jquery是一个很长的插件。这些是相关部分:

(function( $, window) {     
$.widget("mobile.multiview",$.mobile.widget, {

       _create: function() {
            var self = this;
            self._mainEventBindings();
            },
       _mainEventBindings: function () {
            $(document).on('pagebeforeshow', 'div:jqmData(role="page")', function(event, data){
               var page = $(this);
               if ( page.data("counter") == 0 || typeof page.data("counter") == 'undefined') {
                   self.setupMultiview(event, page);
                   }
            });
          },
       setupMultiview: function(event, page) {
            var self = this;
            page.find("div:jqmData(role='panel')").addClass('HELLO').end()  
            } 
       }) (jQuery,this);

2 个答案:

答案 0 :(得分:0)

这个怎么样?

$('div').each( function() {
    if( $(this).data('role') == "panel" ) {
       $this.addClass("HELLO");
    }
});

答案 1 :(得分:0)

确定。找到了一个

 $('div:jqmData(panel="mid")').removeClass()

清除了所有已正确分配的内容。