JavaScript判断两个价格均低于阈值时修改元素背景色功能失效,如何解决?
问题根因
- 嵌套循环逻辑完全错误:你获取的
cardCurrentBidValuesString、cardStartBidValueString、cardBg三个节点列表是同索引一一对应的,第i个当前价、第i个起拍价、第i个背景元素属于同一个商品,不需要双层遍历。你写的内层x循环会在跑完所有起拍价元素后,只把最后一个起拍价的解析值赋值给parsedCardsStartBidPrice,导致所有商品的起拍价判断都用最后一个元素的值,逻辑完全错位。 - 变量未声明:所有价格相关变量没有加
let/const声明,会隐式成为全局变量,容易引发不可预期的异常。 - 重复计算:用户输入的阈值在循环里重复做
parseInt转换,没有提前处理。
正确实现代码
function deals() { // 提前处理用户输入,做合法性校验 const userInput = prompt('Set max Bid Price:'); const maxBidPrice = parseInt(userInput); if (isNaN(maxBidPrice) || maxBidPrice <= 0) { alert('请输入有效的正整数价格阈值'); return; } const currentBidEls = document.querySelectorAll('.auction > .auctionValue:nth-child(2) > .currency-coins.value'); const startBidEls = document.querySelectorAll('.auction > .auctionStartPrice.auctionValue > .currency-coins.value'); const cardBgEls = document.querySelectorAll('.rowContent.has-tap-callback'); // 校验三个列表长度一致,避免索引错位 if (currentBidEls.length !== startBidEls.length || currentBidEls.length !== cardBgEls.length) { alert('页面元素匹配异常,三个列表长度不一致'); return; } // 单循环遍历同索引元素即可 for (let i = 0; i < currentBidEls.length; i++) { // 解析当前出价 let currentBid = currentBidEls[i].textContent.replaceAll(',', ''); currentBid = currentBid === '---' ? 0 : parseInt(currentBid); // 解析起拍价 let startBid = startBidEls[i].textContent.replaceAll(',', ''); startBid = startBid === '---' ? 0 : parseInt(startBid); // 双条件判断 if (currentBid < maxBidPrice && startBid < maxBidPrice) { cardBgEls[i].style.backgroundColor = '#0311c3'; } } } deals();
改动说明
- 去掉了错误的嵌套循环,改为单循环遍历同索引的三个对应元素,保证价格和商品一一匹配
- 提前处理用户输入的阈值,增加合法性校验,避免无效输入导致逻辑异常
- 增加了三个节点列表的长度校验,避免页面结构变化导致的索引错位
- 优化了价格解析的代码写法,用
replaceAll替代split+join更直观 - 所有变量都加了声明,避免全局变量污染
内容的提问来源于stack exchange,提问作者exec85
相关产品推荐
相关产品推荐

