You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用JavaScript修改Django模板循环中各交易的货币显示

解决所有交易货币显示修改的问题

你当前的问题根源是循环渲染时重复使用了同一个id="price"——HTML规范里id是DOM元素的唯一标识,document.getElementById()只会返回第一个匹配的元素,所以只有第一条交易的价格会被修改。

下面是具体的修复步骤:

1. 修改Django模板,将id替换为class

把价格元素的id="price"改成class="price",因为class可以重复用于多个元素:

{% for transaction in transactions %}
    <ul>
        <li>{{transaction.number}}</li>
        <li class="price">{{transaction.price}} USD </li>
        <li>{{transaction.created}}</li>
    </ul>
    <hr>
{% endfor %}

2. 更新JavaScript代码,批量修改所有价格元素

在下拉菜单的onchange事件中,获取所有class为price的元素,遍历每个元素更新内容:

方法一:使用getElementsByClassName

const priceElements = document.getElementsByClassName('price');
for (let i = 0; i < priceElements.length; i++) {
    priceElements[i].innerHTML = `${totalExchangeRate2} ${selectValue}`;
}

方法二:使用querySelectorAll(更灵活)

const priceElements = document.querySelectorAll('.price');
priceElements.forEach(element => {
    element.innerHTML = `${totalExchangeRate2} ${selectValue}`;
});

额外优化:基于原始价格计算(避免精度丢失)

如果每次切换货币时直接覆盖innerHTML,多次切换后可能会出现精度问题。建议把原始的USD价格存在元素的自定义属性里,每次切换都基于原始值重新计算:

修改模板:

<li class="price" data-original-price="{{transaction.price}}">{{transaction.price}} USD </li>

修改JavaScript:

const priceElements = document.querySelectorAll('.price');
priceElements.forEach(element => {
    // 获取原始价格并转换为数字
    const originalPrice = parseFloat(element.dataset.originalPrice);
    // 计算转换后的价格,保留两位小数
    const convertedPrice = (originalPrice * totalExchangeRate2).toFixed(2);
    // 更新显示内容
    element.innerHTML = `${convertedPrice} ${selectValue}`;
});

内容的提问来源于stack exchange,提问作者Red Reaper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 14:48:16