Jquery 创建表值的列表/数组

Jquery 创建表值的列表/数组,jquery,arrays,list,html-table,Jquery,Arrays,List,Html Table,我有一个表,其中有6个固定列,如下所示,还有动态创建的可变内容。在每列中,值只能出现一次,但不能出现在所有列中 是否有一种方法可以获得一个列表/数组,其中包含Cat列中的所有值和Vol列中的卷,如下面的示例变量 我的桌子: 这是工作演示 一种可能的办法: var itemsData = { item1: [], item2: [], item3: [] }; var $td = $('#myTable').find('td'); $.each(itemsData, functio

我有一个表,其中有6个固定列,如下所示,还有动态创建的可变内容。在每列中,值只能出现一次,但不能出现在所有列中

是否有一种方法可以获得一个列表/数组,其中包含Cat列中的所有值和Vol列中的卷,如下面的示例变量

我的桌子:

这是工作演示

一种可能的办法:

var itemsData = {
  item1: [],
  item2: [],
  item3: []
};

var $td = $('#myTable').find('td');

$.each(itemsData, function(itemName) {
  $td.filter(':contains(' + itemName + ')').each(function(el) {
    itemsData[itemName].push(this.nextSibling.innerText);
  });
});
。我将变量item1和item2替换为一个数据对象,将它们存储为属性。这种方法的关键部分是contains函数,该函数检查给定元素的文本内容是否为给定字符串

这种方法的另一种选择是为那些“header”元素提供特定的数据属性。例如:

<td data-item="item3">item3</td><td>5</td>
<td data-item="item2">item2</td><td>7</td>
...
试试这个:

$document.readyfunction{ var项目={ 项目1:[], 项目2:[], 项目3:[] }; $'myTable>tbody>tr'.eachfunction{ var cols=$this.find'td'; 对于变量col=0;col工作示例:我留下了一个空项,以表明在本例中,数组中放入了一个0

您可以向数组中添加类吗?当然,这不会有问题。好的,我想我找到了一个没有类的解决方案。此外,我在JSFIDLE上测试了它,然后回答;而且你似乎有一个打字错误:应该很棒-谢谢!更正了输入错误,这只是在页面上。谢谢!是否有一种方法可以将其设置为一个数组始终包含6个值,以覆盖某个项未出现在列中的情况?例如,此列的数组可能会显示0。我不明白你说的是什么。你想在数组中正好显示6项吗?对不起,我的意思是3个值而不是6。我将看一下您的演示并与其他解决方案进行比较。再次感谢!谢谢-这看起来很好!与下面相同的问题:是否有一种方法可以设置此值,使数组始终包含6个值,以涵盖某个项不出现在列中的情况?例如,对于该列,数组可能会显示0。不确定您的意思;你能改变我创建的演示,展示你所说的结构的例子吗?对不起,我指的是3个值而不是6。我将看一下您的演示并与其他解决方案进行比较。再次感谢!
<table id="myTable">
    <thead>
        <tr>
            <th class="myHeader">Cat 1</th>
            <th>Vol 1</th>
            <th class="myHeader">Cat 2</th>
            <th>Vol 2</th>
            <th class="myHeader">Cat 3</th>
            <th>Vol 3</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>item1</td><td class="item1">8</td><td>item2</td><td class="item2">7</td><td>item3</td><td class="item3">9</td>
        </tr>
        <tr>
            <td>item3</td><td class="item3">5</td><td>item2</td><td class="item2">7</td><td>item1</td><td class="item1">4</td>
        </tr>
        <tr>
            <td>item2</td><td class="item2">1</td><td>item1</td><td class="item1">5</td><td>item3</td><td class="item3">3</td>
        </tr>
    </body>
</table>

$(function(){
    var item1=new Array();
    var item2=new Array();
    var item3=new Array();
    $('.item1').each(function(){
    item1.push($(this).html());
    });

    $('.item2').each(function(){
    item2.push($(this).html());
    });

    $('.item3').each(function(){
    item3.push($(this).html());
    });
});
var itemsData = {
  item1: [],
  item2: [],
  item3: []
};

var $td = $('#myTable').find('td');

$.each(itemsData, function(itemName) {
  $td.filter(':contains(' + itemName + ')').each(function(el) {
    itemsData[itemName].push(this.nextSibling.innerText);
  });
});
<td data-item="item3">item3</td><td>5</td>
<td data-item="item2">item2</td><td>7</td>
...
$td.filter('[data-item="' + itemName + '"]').each(function(el) { // ...