克隆表并过滤掉行

时间:2015-11-03 15:39:32

标签: javascript jquery html

您好我有一个关于克隆表格的问题。

我想过滤掉一些特定的结果并输出这些结果。 让我用HTML代码更好地解释自己:

<table class="table table-striped" id="ProfileList2">
    <tbody>
        <tr>
            <td>21</td>
            <td>2014-02-28 21:12:12</td>
            <td>20</td>
            <td>one</td>
            <td>166</td>
        </tr>
        <tr>
            <td>22</td>
            <td>2014-03-01 14:04:35</td>
            <td>20</td>
            <td>one</td>
            <td>0</td>
        </tr>
        <tr>
            <td>23</td>
            <td>2014-03-03 15:22:56</td>
            <td>20</td>
            <td>one</td>
            <td>21</td>
        </tr>
        <tr>
            <td>24</td>
            <td>2014-03-03 17:15:56</td>
            <td>20</td>
            <td>one</td>
            <td>21</td>
        </tr>
        <tr>
            <td>25</td>
            <td>2014-03-03 17:50:49</td>
            <td>20</td>
            <td>one</td>
            <td>0</td>
        </tr>
        <tr>
            <td>26</td>
            <td>2014-03-05 17:33:42</td>
            <td>20</td>
            <td>one</td>
            <td>24</td>
        </tr>
    </tbody>
</table>

<p class="result"></p>

在我的Javascript中,我想过滤掉上一个<td>或每个<tr>值0内的所有结果。

var $mainTable = $("#ProfileList2");
var $training = $mainTable.clone("tr td:nth-child(5):not(:contains('0'))");

$('p').append($training);

此代码将克隆直接副本而不进行任何过滤。 如果我将clone函数更改为,例如:find函数,它将仅返回表数据:166 21 21 24.

是否有任何可用的函数将返回整个表行而不是仅返回表数据?

JSFIDDLE OVER HERE

2 个答案:

答案 0 :(得分:2)

好吧,你可以复制整件事,然后过滤掉你不喜欢的东西,那怎么样?

var copy = $("#ProfileList2").clone();

$('p').append(copy);

copy.find("tr td:nth-child(5):contains('0')").parent().remove();

请注意,拥有多个具有相同ID的元素并不是一个好主意。

答案 1 :(得分:2)

要抓取表格行,请更改此内容:

$mainTable.find("tr td:nth-child(5):not(:contains('0'))")

......对此:

$mainTable.find("tr td:nth-child(5):not(:contains('0'))").parent()

另请注意,根据规范,paragraph元素不能包含table元素。 (尽管大多数浏览器都允许这样做。)将其更改为div会更好。

Fiddle 1

<小时/> 另请注意,包含选择器将在单元格中搜索0 ,因此它将匹配包含&#34; 160&#34;的单元格。以及包含&#34; 0。&#34;

的那些

相反,您可以过滤以仅排除等于&#34; 0&#34;:

的单元格
$mainTable
  .find("tr td:nth-child(5)")
  .filter(function() {return $(this).text() != '0';})
  .parent();

Fiddle 2