0

我有一张这样的桌子

<table>
    <tr>
        <td>Item1<td>
        <td><p>Description<p><br><td>
    </tr>
    <tr>
        <td>Item2<td>
        <td><p>Description1</p><p>Description2</p><br><td>
    </tr>
    <tr>
        <td>Item3<td>
        <td><p>Description3<p><br><td>
    </tr>
</table>

这是我的 javascript 来获取一系列项目

var iList = document.querySelectorAll('td:first');   

这是获取所有映射的td p内容

var iDesc = document.querySelectorAll('td:second p');

顺便说一下,我想创建一个映射然后在 onload 事件中对其内容进行排序。我在做什么正确吗?我的意思是选择器td:first,第二个是我的示例表

在上面的示例中,有一个包含 2的td元素p

4

2 回答 2

1

伪选择器:first并不:second存在,(:first存在于 jQuery 中但它不是 CSS 选择器)。这是CSS 选择器的官方列表

您需要的是:nth-child伪选择器:

var iList = document.querySelectorAll('td:nth-child(1)');    
var iDesc = document.querySelectorAll('td:nth-child(2) p');

PS:注意你的代码,你不要关闭<td>s而是重新打开新的,<td>不必关闭,这意味着<tr>你有4个<td>s:

<tr>
    <td>Item1
    <td>
    <td><p>Description<p><br>
    <td>
</tr>
于 2012-11-12T11:22:45.417 回答
0

您应该为每个 tr 元素运行一个循环,并从 td 元素中获取键和值。接下来,将它们推入一个数组。

var arr = new Array();
$('table tr').each(function() {
    var $row = $(this);
    var key = $row.find('td:first').html();
    var value = $row.find('td:last').html();
    arr.push([key, value]);
});

最后,按数组的第一个索引对数组进行排序。

arr.sort(function(a, b) {
    var valueA, valueB;
    valueA = a[0]; // Where 1 is your index, from your example
    valueB = b[0];
    if (valueA < valueB) {
        return -1;
    }
    else if (valueA > valueB) {
        return 1;
    }
    return 0;
});

现场演示

于 2012-11-12T11:47:20.677 回答