0

我正在尝试将股票价格写入表格单元格。现在它正在循环并只写最后一个价格。我想将价格写入表格中的每个#price 单元格。这就是我所拥有的:

$(document).ready(function(){

  var updater = setTimeout(function(){
      $.ajax({  
        url: '../html/update.php',  
        success: function(data) { 
          var resp = jQuery.parseJSON(data); 
          var len = resp.price.length;

          for(var i=0; i<len; i++){

                  $('#price').html(resp.price[i].price);

          }
        }
      });
  },60);

});

<?php foreach ($shares as $row): ?>

        <tr >
        <td><?php echo $row["symbol"];?></td>
        <td><a href="extended_info.php?id=<?=$row["symbol"]?>"><?php echo $row["name"];?></a></td>
        <td style="text-align: right;"><?php echo $row["shares"];?></td>
        <td id="price" style="text-align: right;">$ </td>
        <td style="text-align: right;"><?php 
        $change = number_format($row["change"],2);
        echo sprintf( "%+1.2f", $change );
        echo "   ( ";
        echo $row["pct"]; 
        echo "   )";
        ?></td>
        <td style="text-align: right;">$ <?php echo number_format($row["dayGain"],2);?>  </td>    
        <td style="text-align: right;">$ <?php echo number_format($row["total"],2);?></td>
        </tr>

<?php endforeach; ?>
4

2 回答 2

2

您需要为 update.php 回复的每一行确定要更新的正确表行。

在你的 JavaScript 中试试这个:

$('[data-symbol="'+resp.price[i].symbol+'"]').html(resp.price[i].price);

这在 PHP 中:

<td data-symbol="<?=$row['symbol']?>" style="text-align: right;">$ </td>

假设每个股票symbol都是唯一的,您将能够识别正确的表格单元格以更新股票价格。此外,使用这些data-*属性可以使您的标记符合标准。

于 2013-04-14T11:36:01.597 回答
1

因为你已经设置了一个 id="price" 像这样:

<td id="price" style="text-align: right;">$ </td>

for 循环的每次迭代(在 jQuery 部分中)始终为同一个元素设置值(这是 dom 中的最后一个元素)。这是因为 id="price" 不是唯一的,并且 jQuery 选择 dom 中具有此 id 的最后一个元素被认为是唯一的。

在我看来,有两种解决方案:

首先: “将 id="price" 转换为数组*,这样您就可以遍历数组中的每个项目。您可以通过在 id 价格中添加括号来做到这一点,如下所示:id="price[]"。但还有另一个这个问题。html中的id被认为是unqiue,这里不是这种情况。你可以给元素一个名字,比如这个name="price[]"。

短版,将行改为:

<td name="price[]" style="text-align: right;">$ </td>

然后在 jQuery 中遍历数组并相应地设置值。

Second: Id's are unique and classes don't have to be, therefore change id to class like this: id="price" to class="price". You could do this as long as you don't have any other element in html that has the name price.

Short verison, change line to:

<td class="price" style="text-align: right;">$ </td>

In the jQuery you then iterate through elements with classname price and set values accordingly.

于 2013-04-14T13:24:38.587 回答