如何使用 Jquery 获取 td 值并存储在数组中? [复制]

Posted

技术标签:

【中文标题】如何使用 Jquery 获取 td 值并存储在数组中? [复制]【英文标题】:How to get td values and store in array using Jquery? [duplicate] 【发布时间】:2019-10-26 09:50:18 【问题描述】:

我正在寻找一种方法来获取(第一个、第二个、第三个等)td 值,并将它们存储在数组中。

使用each 迭代一个td:

$("table tbody tr td").each(function(i,e)
        console.log($(this).html());
      );

使用此代码,我需要获取所有列值,例如:

George
Princeton
Alabama
Pizza

如何使用各自的键将这些值存储在数组中:Name, College, State, Food。我在想:

 var array = [];
$("table tbody tr td").each(function(i,e)
        array['Name'] = $(this) ??  //I dont know how get the first td. 
      );

我不知道这是否是迭代表的最佳方式,但我认为我在如何获取第一个、第二个、第三个 td 值方面遗漏了一些东西。

表格:(这只是一个例子,值是动态创建的)

<table >
    <tbody>
        <tr>
            <td> George </td>
            <td> Princeton </td>
            <td> Alabama </td>
            <td> Pizza </td>
        </tr>
        <tr>
            <td> Charli</td>
                <td> Princeton </td>
            <td> Alabama </td>
            <td> Milk Shake </td>
        </tr>
        <tr>
            <td> Max</td>
                <td> Princeton </td>
            <td> Alabama </td>
            <td> Rice </td>
        </tr>
        <tr>
            <td> Peter</td>
                <td> Princeton </td>
            <td> Alabama </td>
            <td> Fast Food </td>
        </tr>
    </tbody>
</table>

【问题讨论】:

请同时发布表格html 这不是数组的用途。使用一个对象。 要获取td 的文本,请使用text() 好吧,公平地说,你的问题的标题是“如何使用 Jquery 在数组中存储值?”第一句话是“我正在寻找一种将 td 值存储在 key => value 的数组中的方法。”也许您可以edit您的标题和问题,让您更清楚您遇到的问题是什么? 另外,适当的副本是Create an array of objects by iterating through table rows 【参考方案1】:

const arrayFromJQuery = $("table tbody tr").map(function(i, row) 
  const data = $('td', row);
  return 
    Name: data.eq(0).text().trim(),
    College: data.eq(1).text().trim(),
    State: data.eq(2).text().trim(),
    Food: data.eq(3).text().trim()
  
).get();

console.log(arrayFromJQuery);

// or without jquery, just modern JS

const array = [...document.querySelectorAll("table tbody tr")].map((row) => 
  const [Name, College, State, Food] = [...row.querySelectorAll('td')].map(td => td.textContent.trim());
  return 
    Name,
    College,
    State,
    Food
  
)
console.log(array);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<table>
  <tbody>
    <tr>
      <td> George </td>
      <td> Princeton </td>
      <td> Alabama </td>
      <td> Pizza </td>
    </tr>
    <tr>
      <td> Charli</td>
      <td> Princeton </td>
      <td> Alabama </td>
      <td> Milk Shake </td>
    </tr>
    <tr>
      <td> Max</td>
      <td> Princeton </td>
      <td> Alabama </td>
      <td> Rice </td>
    </tr>
    <tr>
      <td> Peter</td>
      <td> Princeton </td>
      <td> Alabama </td>
      <td> Fast Food </td>
    </tr>
  </tbody>
</table>

【讨论】:

【参考方案2】:

试试这个:

$(function() 
  var keys = [];
  var myData = ;
  $("table thead th").each(function() 
    var k = $(this).text().trim().toLowerCase();
    keys.push(k);
    myData[k] = [];
  );
  $("table tbody tr").each(function(i, el) 
    $.each(keys, function(k, v) 
      myData[v].push($("td:eq(" + k + ")", el).text().trim());
    );
  );
  console.log(myData);
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
  <thead>
    <tr>
      <th>Name</th>
      <th>College</th>
      <th>State</th>
      <th>Food</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td> George </td>
      <td> Princeton </td>
      <td> Alabama </td>
      <td> Pizza </td>
    </tr>
    <tr>
      <td> Charli</td>
      <td> Princeton </td>
      <td> Alabama </td>
      <td> Milk Shake </td>
    </tr>
    <tr>
      <td> Max</td>
      <td> Princeton </td>
      <td> Alabama </td>
      <td> Rice </td>
    </tr>
    <tr>
      <td> Peter</td>
      <td> Princeton </td>
      <td> Alabama </td>
      <td> Fast Food </td>
    </tr>
  </tbody>
</table>

结果:


  "name": [
    "George",
    "Charli",
    "Max",
    "Peter"
  ],
  "college": [
    "Princeton",
    "Princeton",
    "Princeton",
    "Princeton"
  ],
  "state": [
    "Alabama",
    "Alabama",
    "Alabama",
    "Alabama"
  ],
  "food": [
    "Pizza",
    "Milk Shake",
    "Rice",
    "Fast Food"
  ]

如果你需要一个对象数组,你可以这样做:

$(function() 
  var keys = [];
  var myData = [];
  $("table thead th").each(function() 
    var k = $(this).text().trim().toLowerCase();
    keys.push(k);
  );
  $("table tbody tr").each(function(i, el) 
    var row = 
    $.each(keys, function(k, v) 
      row[v] = $("td:eq(" + k + ")", el).text().trim();
    );
    myData.push(row);
  );
  console.log(myData);
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
  <thead>
    <tr>
      <th>Name</th>
      <th>College</th>
      <th>State</th>
      <th>Food</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td> George </td>
      <td> Princeton </td>
      <td> Alabama </td>
      <td> Pizza </td>
    </tr>
    <tr>
      <td> Charli</td>
      <td> Princeton </td>
      <td> Alabama </td>
      <td> Milk Shake </td>
    </tr>
    <tr>
      <td> Max</td>
      <td> Princeton </td>
      <td> Alabama </td>
      <td> Rice </td>
    </tr>
    <tr>
      <td> Peter</td>
      <td> Princeton </td>
      <td> Alabama </td>
      <td> Fast Food </td>
    </tr>
  </tbody>
</table>

结果:

[
  
    "name": "George",
    "college": "Princeton",
    "state": "Alabama",
    "food": "Pizza"
  ,
  
    "name": "Charli",
    "college": "Princeton",
    "state": "Alabama",
    "food": "Milk Shake"
  ,
  
    "name": "Max",
    "college": "Princeton",
    "state": "Alabama",
    "food": "Rice"
  ,
  
    "name": "Peter",
    "college": "Princeton",
    "state": "Alabama",
    "food": "Fast Food"
  
]

希望对您有所帮助。

【讨论】:

嗨 Twisty,如果我的文本之间有空格,例如 &lt;th&gt;Student Name&lt;/th&gt; 我如何在 myData 中删除它? @***SavedMyLife 你可以使用.replace() 试过但失败了,你能帮忙吗? @***SavedMyLife var k = $(this).text().trim().toLowerCase().replace(" ", ""); 应该这样做。 但这只会删除字符串的第一个空格,如果字符串是"U know Nothing"【参考方案3】:

阅读this 我必须找到解决方案。

 $("#test").click(function()

          var thvalues = $('table thead th').map(function()
            return $(this).text();
          );

          var rows = $('table tbody tr').map(function()
            var result = ;
            var values = $(this).find('td').map(function()
              return $(this).text();
            );

          for(var i=0;i<thvalues.length;i++)
            result[thvalues[i]] = values[i];
          

          return result
          ).toArray();

          console.log(thvalues);
          console.log(rows );

       ); // endAdd

结果

(2) […, …]
0:
Name: " George "
State: " Alabama "
College: " Princeton "
Food: " Pizza "
__proto__: Object
1:
Name: " Peter "
State: " Alabama "
College: " Princeton "
Food: " Fast Food "
__proto__: Object
length: 2
__proto__: Array(0)

【讨论】:

以上是关于如何使用 Jquery 获取 td 值并存储在数组中? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何获取数组值并使用 Mongoose 进行结构化?

使用 jQuery 从 select2 小部件中获取多个值并存储,然后重新加载它们

怎样从对象中获取键值并保存在对象中

获取 JSON 值到数组

如何使用 jquery 在表格元素中获取“td”?

如何通过 jQuery+Codeigniter 获取值并显示在输入字段中?