对于每个 table 推送到数组

for each table push to array

我是代码初学者, 我正在尝试 运行 对此 table 并从每个 .winner class 获取文本并将其推送到数组,

所以不是得到:
["aa","aa","dd"]

我得到
["aaaadd","aaaadd","aaaadd"]

$(document).ready(function(){

    var arr = [];
    var winner = $('.winner').text() ;

     for ( i = 0; i < $('table').length ; i++ ) {           
        arr.push(winner);
     }

     console.log(arr);      

});

HTML:

    <table>      
        <tr>
            <td>#</td>
            <td class="winner">aa</td>
            <td>bb</td>
            <td>cc</td>
            <td>dd</td>
        </tr>
   </table>

   <table>      
        <tr>
            <td>#</td>
            <td class="winner">aa</td>
            <td>bb</td>
            <td>cc</td>
            <td>dd</td>
        </tr>
   </table>

   <table>      
        <tr>
            <td>#</td>
            <td class="winner">dd</td>
            <td>cc</td>
            <td>bb</td>
            <td>aa</td>
        </tr>
   </table>

我想我的 for 循环有问题

var arr = [];

$('table .winner').each(function () {
   arr.push($(this).text());  
})

Example

或没有class的版本.winner

$('table').each(function () {
   arr.push($(this).find('tr').eq(0).find('td').eq(1).text());
}); 

Example

$('table .winner') - returns 3 td's 与 class .winner

$(this).text() - 从当前元素获取文本。

在你的例子中 $('.winner').text() returns 文本 "aaaadd",然后你得到 $('table').length (将是 3)并且三次将相同的文本推送到 arr

句子

var winner = $('.winner')

会给你一个对象数组,所以你需要循环每个对象并为每个对象调用 text() 方法。

有了这个:

var winner = $('.winner').text();

您将从标记为 winner 的所有 td 元素中获取组合文本(请参阅文档 here)。

然后,对于每个 table,将此值推送到数组:

 for ( i = 0; i < $('table').length ; i++ ) {           
    arr.push(winner);
 }

这其实是没有必要的。 你想要的大概是:

var winners = $('.winner');

for (var i = 0; i < winners.length(); ++i) {
    arr.push(winners.eq(i).text());
}