2011-01-19 4 views
0

Я действительно смущен поведением. Любая помощь будет оценена по этому поводу. У меня есть простая таблица, и она ведет себя по-другому, хотя использует один и тот же вызов JQuery.Таблица JQuery slice remove

<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')) 

Приведенный выше код отображается только последний столбец. Почему это так? Я хоп, я могу правильно упомянуть о своей проблеме. Любая помощь будет оценена

+0

Что бы вы хотели, чтобы результаты были? Предполагая, что это выше, можете ли вы опубликовать «после» (или то, что вы хотите получить от «getBody»)? (Кроме того, для тех, кто хочет сыграть скрипку: http://www.jsfiddle.net/bradchristie/8W5Cg/) –

ответ

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

Бинго. Благодарю. какая глупая ошибка, которую я делал – Nrusingha

+0

@Nrusingha: Пожалуйста. FYI, если клонированная таблица будет вставлена ​​(другими словами, если вам действительно не нужна строка HTML), вы можете просто вернуть клонированную таблицу. 'return newTable;' – user113716

0

Короткий ответ, потому что вы используете slide(-1) в функции getBody() и slice(-2) в первом вызове JQuery. slice (-2) возвращает 2 столбца, а срез (-1) возвращает только один столбец.

Кроме того, вы не должны вызывать children() несколько раз, вы могли бы просто использовать $element.find('tbody > tr > td');

+0

Они делают это при первом вызове. Я уверен, что это имеет какое-то отношение к тому, что они передают 'getBody()' и что это должно быть 'getBody ($ ('table.PrintTable table')) вместо этого (но я не знаю ожидаемого результата). –

+0

@Brad Christie: Хм, это заставляет меня думать, что, возможно, он хочет дублировать первую таблицу за последние два столбца. Но поскольку он использует срез (-1), он возвращает только последний столбец для новой таблицы. Возможно, срез (-1) и срез (-2) меня смутил реальный вопрос здесь. Я обновлю свой ответ в одно мгновение. - Вы не хотите использовать $ (таблица table.PrintTable), поскольку это будет искать вложенную таблицу внутри PrintTable, которая есть, но вы не хотите этого делать в этом случае. –

+0

Спасибо за ответ. Вы предпочтете правильно. Я хочу, чтобы та же таблица находилась в всплывающем окне без двух последних столбцов. Селекторы, о которых вы упомянули, также будут смотреться в вложенной таблице. В первом сценарии, который я упомянул, он правильно удаляет столбец, но в следующем сценарии, даже если я помещаю slice (-2) .remove(), он отображает только удаленные столбцы. – Nrusingha