2011-01-19 107 views
0

我真的很困惑的行爲。任何幫助將不勝感激。我有一個簡單的表,它使用相同的JQuery調用的行爲不同。表JQuery切片刪除

<table class="PrintTable"> 
    <tr> 
     <td> 
     <table> 
      <thead> 
       <tr><th>Type Of Transaction</th></tr> 
      </thead> 
      <tbody> 
       <tr> 
        <td>Name</td> 
       </tr> 
       <tr> 
        <td>Age</td> 
       </tr> 
      </tbody> 
     </table> 
     </td> 
     <td> 
     <table> 
      <thead> 
       <tr><th>2006</th></tr> 
      </thead> 
      <tbody> 
       <tr> 
        <td>Andi</td> 
       </tr> 
       <tr> 
        <td>25</td> 
       </tr> 
      </tbody> 
     </table> 
     </td> 
     <td> 
     <table> 
      <thead> 
       <tr><th>2007</th></tr> 
      </thead> 
      <tbody> 
       <tr> 
        <td>tom</td> 
       </tr> 
       <tr> 
        <td>26</td> 
       </tr> 
      </tbody> 
     </table> 
     </td> 
    </tr> 
</table><script>$('table.PrintTable >tbody>tr>td').slice(-2).remove();</script> 

上面的jQuery刪除了期望的最後兩列。

但是,如果我改變了代碼: -

function getBody(element) 
    { 
     var divider=2; 
     var originalTable=element.clone(); 
     var newTable = ($(originalTable).children('tbody').children('tr').children('td')).slice(-1).remove(); 
     return $('<div>').append(newTable).html(); 
    } 

getBoby($('table.PrintTable')) 

上面的代碼只顯示最後一列。爲什麼這樣?我跳,我能夠正確地提到我的問題。任何幫助將在第一jQuery的呼叫理解

+0

你想要結果是什麼?假設以上是之前的版本,你可以發佈一個「之後」(或者你想從`getBody`返回的內容)嗎? (另外,對於任何想玩小提琴的人:http://www.jsfiddle.net/bradchristie/8W5Cg/) – 2011-01-19 16:39:01

回答

2

,似乎你想要的原始的副本,但沒有最後兩列。

這樣做:

function getBody(element) { 
    var divider=2; 
    var newTable = element.clone(); 
    newTable.children('tbody').children('tr').children('td').slice(-2).remove(); 
    return $('<div>').append(newTable).html(); 
} 

getBody($('table.PrintTable')); 

在你的代碼,newTable被引用您切片和刪除克隆的部分。不是主要的克隆表。

0

簡短的回答是,因爲你在getBody()功能使用slide(-1)slice(-2)。 012-slice(-2)返回2列,slice(-1)僅返回一列。

此外,你不必叫children()多次,你可以只使用基於您的評論$element.find('tbody > tr > td');

+0

他們在第一次打電話時就這麼做。我敢打賭,它與他們傳遞`getBody()`有關,它應該是`getBody($('table.PrintTable table'))``而不是(但我不知道預期的結果)。 – 2011-01-19 16:44:32

+0

@布拉德克里斯蒂:嗯,這讓我覺得他可能希望將第一張表的副本減去最後兩列。但是因爲他使用了slice(-1),它只返回新表的最後一列。也許片(-1)和片(-2)讓我對這裏真正的問題感到困惑。我馬上更新我的答案。 - 您不希望使用$('table.PrintTable表'),因爲它會在PrintTable中查找嵌套表,但在這種情況下您不希望這樣做。 – 2011-01-19 16:50:15