2015-05-08 79 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