2011-01-19 87 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