2015-05-08 46 views
0

有人可以告诉我为什么这段代码可以在chorme上正常工作,但不能在其他浏览器上正常工作?Jquery,选择一个类的所有元素

$("#"+grid+" tr:nth-of-type(2) td.table_view_tablet").each(function() { 
     id = $(this).attr('aria-describedby'); 
     id = id.split("_"); 
     jQuery("#"+grid).jqGrid('hideCol', [""+id[2]+""]); 
    }); 

I'want选择表“网格”的第二行以类“table_view_tablet”的所有小区

我的HTML代码与此类似:

<table id="mailing_grid" aria-labelledby="gbox_mailing_grid" aria-multiselectable="false" border="0" cellpadding="0" cellspacing="0" class="ui-jqgrid-btable" role="grid" style="width: 1039px;" tabindex="0"> 
     <tr class="jqgfirstrow" role="row" style="height: auto"> 
      <td role="gridcell" style="height: 0px; width: 47px;"></td> 
      <td role="gridcell" style="height: 0px; width: 47px;"></td> 
      <td role="gridcell" style="height: 0px; width: 78px;"></td> 
      <td role="gridcell" style="height: 0px; width: 116px;"></td> 
      <td role="gridcell" style="height: 0px; width: 116px;"></td> 
      <td role="gridcell" style="height: 0px; width: 78px;"></td> 
      <td role="gridcell" style="height: 0px; width: 116px;"></td> 
      <td role="gridcell" style="height: 0px; width: 31px;"></td> 
     </tr> 
     <tr id="1" class="ui-widget-content jqgrow ui-row-ltr ui-state-highlight" role="row" tabindex="0"> 
      <td aria-describedby="mailing_grid_CSCDML" class="table_view_mobile" role="gridcell" style="text-align: left;">1</td> 
      <td aria-describedby="mailing_grid_CSCDCS" class="table_view_mobile" role="gridcell" style="text-align: left;">2</td> 
      <td aria-describedby="mailing_grid_CSNMCS" class="table_view_mobile" role="gridcell" style="text-align: left;">3</td> 
      <td aria-describedby="mailing_grid_CSDSCS" class="table_view_mobile" role="gridcell" style="text-align: left;">4</td> 
      <td aria-describedby="mailing_grid_CSADR" class="table_view_desktop" role="gridcell" style="text-align: left;">5</td> 
      <td aria-describedby="mailing_grid_CSCDZP" class="table_view_desktop" role="gridcell" style="text-align: left;">6</td> 
      <td aria-describedby="mailing_grid_CSCITY" class="table_view_mobile" role="gridcell" style="text-align: left;">7</td> 
      <td aria-describedby="mailing_grid_CSCDCY" class="table_view_mobile" role="gridcell" style="text-align: left;">8</td> 
     </tr> 
    </table> 
+3

你能否发布你的HTML,这将有助于回答你的问题。 – TomSlick

+0

尝试使用tr:eq(2),因为这是第n个元素的正确jQuery调整器,>间距。 –

+0

http://jquery.com/browser-support/ – abc123

回答

0

也许东西是更多的jQuery驱动,而不是CSS驱动的,所以你不需要依赖CSS属性/选择器的浏览器支持:

var $grid = $('#' + grid); 

$grid 
    .find('tr') 
    .eq(2) 
    .find('td.table_view_tablet') 
    .each(function(){ 
     var $self = $(this); 

     $grid.jqGrid('hideCol',[ 
      $self.attr('aria-describedby').split('_')[2] 
     ]); 
    }); 

如果没有您的HTML或jsFiddle,我无法确认这是否按预期工作,但它与您之前以较低CSS驱动方式执行的代码的目标相同。这也有利于缓存,所以它可能会更快。这就是说,一个潜在的改善,假设jqGrid作品,因为我认为它的作用:

var $grid = $('#' + grid), 
    hideColArr = []; 

$grid 
    .find('tr') 
    .eq(2) 
    .find('td.table_view_tablet') 
    .each(function(){ 
     hideColArr[hideColArr.length] = $(this).attr('aria-describedby').split('_')[2]; 
    }); 

$grid.jqGrid('hideCol',hideColArr); 

这样,你不叫不是一个时间,你需要更多的jqGrid。再次,在这里做出假设,但考虑到你传递的是一个数组,这应该可以按照你的想法工作,而不会执行不必​​要的调用

+0

完美!非常感谢! – Mark116