javascript - 在具有不同类的跳过异常之后,jQuery每次迭代都不会为元素赋值
问题描述
我有一组产品(植物种子),我想将它们的默认价格从 3 粒种子更改为 1 粒种子。为了实现这一点,我创建了每个产品 1 个种子值的数组,并尝试通过 each 函数将它们分配给每个具有下拉元素类的产品。有一种产品没有下拉元素,所以我想跳过这一种,将其原始产品价值保留为 3 个种子,但我希望其余的改变。现在,当我调试循环时,它确实为产品编号 1 和 2 正确分配并避免编号 3,因为它是没有下拉列表的产品,并且未能将第三个数组值分配给第四个产品,即最后一个产品。
这是代码:
$(document).ready(function() {
// Create array with one seed value for each product
var oneseedprice = $('.dropdown ul.dropdown li:first-child').map((i, el) =>
el.getAttribute('data-price')).get();
console.log("oneseedprice: " + oneseedprice);
$.each($('.prices-block'), function( index, value ) {
var divselect = $(this).prev().prev();
console.log("divselect class: " + divselect.attr('class'));
if (divselect.attr('class') == 'dropdown') {
$(this).html(oneseedprice[index]);
console.log(oneseedprice[index]);
}
// If element does not have dropdown select
if (divselect.attr('class') == 'rating') {
console.log("no dropdown");
return true;
}
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<!-- PRODUCT 1 -->
<div class="ajax_block_product">
<h1>PRODUCT 1</h1>
<div class="dropdown">
<a href="#">
Number of seeds: <strong>1</strong>
</a>
<ul class="dropdown">
<li data-price="€ 8.50">
Number of seeds: <span>1</span>
</li>
<li data-price="€ 21.50">
Number of seeds: <span>3<span>
</li>
</ul>
</div>
<div class="just-another-element-class"></div>
<div class="prices-block">
<!-- Price by default -->
<span>Price: </span><span class="price">€ 21.50</span>
</div>
</div>
<!-- PRODUCT 2 -->
<div class="ajax_block_product">
<h1>PRODUCT 2</h1>
<div class="dropdown">
<a href="#">
Number of seeds: <strong>1</strong>
</a>
<ul class="dropdown">
<li data-price="€ 7.20">
Number of seeds: <span>1</span>
</li>
<li data-price="€ 18.40">
Number of seeds: <span>3<span>
</li>
</ul>
</div>
<div class="just-another-element-class"></div>
<div class="prices-block">
<!-- Price by default -->
<span>Price: </span><span class="price">€ 18.40</span>
</div>
</div>
<!-- PRODUCT 3 no dropdown-->
<div class="ajax_block_product">
<h1>PRODUCT 3</h1>
<div class="rating"></div>
<div class="just-another-element-class"></div>
<div class="prices-block">
<!-- Price by default -->
<span>Price: </span><span class="price">€ 39.95</span>
</div>
</div>
<!-- PRODUCT 4 -->
<div class="ajax_block_product">
<h1>PRODUCT 4</h1>
<div class="dropdown">
<a href="#" >
Number of seeds: <strong>1</strong>
</a>
<ul class="dropdown">
<li data-price="€ 9.00">
Number of seeds: <span>1</span>
</li>
<li data-price="€ 23.00">
Number of seeds: <span>3<span>
</li>
</ul>
</div>
<div class="just-another-element-class"></div>
<div class="prices-block">
<!-- Price by default -->
<span>Price: </span><span class="price">€ 23.00</span>
</div>
</div>
解决方案
你可以这样做:在你的each()
函数中,只选择类.prices-block
元素.ajax_block_product
的子元素,这些元素的类元素没有类的子元素.rating
:
$(document).ready(function() {
// Create array with one seed value for each product
var oneseedprice = $('.dropdown ul.dropdown li:first-child').map((i, el) =>
el.getAttribute('data-price')).get();
$.each($('.ajax_block_product:not(:has(.rating))').children('.prices-block'), function(index, value) {
var divselect = $(this).prev().prev();
if (divselect.attr('class') == 'dropdown') {
$(this).html(oneseedprice[index]);
}
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="ajax_block_product">
<h1>PRODUCT 1</h1>
<div class="dropdown">
<a href="#">
Number of seeds: <strong>1</strong>
</a>
<ul class="dropdown">
<li data-price="€ 8.50">
Number of seeds: <span>1</span>
</li>
<li data-price="€ 21.50">
Number of seeds: <span>3</span>
</li>
</ul>
</div>
<div class="just-another-element-class"></div>
<div class="prices-block">
<!-- Price by default -->
<span>Price: </span><span class="price">€ 21.50</span>
</div>
</div>
<!-- PRODUCT 2 -->
<div class="ajax_block_product">
<h1>PRODUCT 2</h1>
<div class="dropdown">
<a href="#">
Number of seeds: <strong>1</strong>
</a>
<ul class="dropdown">
<li data-price="€ 7.20">
Number of seeds: <span>1</span>
</li>
<li data-price="€ 18.40">
Number of seeds: <span>3</span>
</li>
</ul>
</div>
<div class="just-another-element-class"></div>
<div class="prices-block">
<!-- Price by default -->
<span>Price: </span><span class="price">€ 18.40</span>
</div>
</div>
<!-- PRODUCT 3 no dropdown-->
<div class="ajax_block_product">
<h1>PRODUCT 3</h1>
<div class="rating"></div>
<div class="just-another-element-class"></div>
<div class="prices-block">
<!-- Price by default -->
<span>Price: </span><span class="price">€ 39.95</span>
</div>
</div>
<!-- PRODUCT 4 -->
<div class="ajax_block_product">
<h1>PRODUCT 4</h1>
<div class="dropdown">
<a href="#">
Number of seeds: <strong>1</strong>
</a>
<ul class="dropdown">
<li data-price="€ 9.00">
Number of seeds: <span>1</span>
</li>
<li data-price="€ 23.00">
Number of seeds: <span>3</span>
</li>
</ul>
</div>
<div class="just-another-element-class"></div>
<div class="prices-block">
<!-- Price by default -->
<span>Price: </span><span class="price">€ 23.00</span>
</div>
</div>
推荐阅读
- html - 多个导航元素上的渐变文本
- c# - 你能帮我 CopyFileDialog 窗体吗
- python-3.x - 如果时间是连续的,如何在时间间隔列表中合并 2 个子列表?
- c++ - 关于静态/隐式链接与动态/显式链接的误解
- vue.js - v-if 不适用于表单验证和显示错误
- war - PayaraMicro 不会在 EJB 或 ApplicationScoped 上调用 @PreDestroy
- javascript - 为什么返回原始 JSON 对象而不是我的部分视图?
- angular8 - Angular 8 routlerlink 仅在页面重新加载后才有效
- powershell - System.IO.Compression.ZipFileExtensions - CreateEntryFromFile 在 zip 上给出“因为它正被另一个进程使用”
- pointers - 如何检查嵌套指针访问/方法在运行时是否无效