jQuery 仅在特定选择器中隐藏项目

jQuery hide item ony in a certain selector

我有以下 html:

<li>
 <select class="variation">
  <option value="1">1</option>
  <option value="2">2</option>
 </select>
 <p class="price"></p>
</li>

这是重复多次(产品列表)。

默认情况下,第一个选项的价格显示在下拉列表旁边,工作正常,当我更改 select 时,它应该将价格更改为 selected 选项的价格,这有效很好,但它不仅隐藏了该产品的其他价格,它还隐藏了每个产品的价格。

我的 JS:

$(".build-box-list li").each(function() {
 $(".variation", this).on("change", function() {
  $(".price").hide();
  $("#" + this.value).show();
 });
});

如何只隐藏特定产品 li 的价格而不是每个产品的价格,我试过 $(".price", this).hide(); 但没有成功。

谢谢

根据提供的code/html,问题是这一行:

$(".price").hide();

没有任何上下文,因此适用于所有 .price 个元素。

it hides it for every product

事件在 .variation 上进行,因此要获取相关的 .price 您可以使用多种方法,我的偏好是先到父级然后再返回(您也可以使用 .siblings.nextAll(如果你胆大的话,可以使用事件 .next)如果你的 html 将来不太可能改变(它可能会......)) .

$(".build-box-list li").each(function() {
 $(".variation", this).on("change", function() {
  $(this).closest("li").find(".price").hide();
  $("#" + this.value).show();
 });
});

另外,您可以删除循环:

$(".build-box-list li .varation").on("change", function() {
  $(this).closest("li").find(".price").hide();
  $("#" + this.value).show();
});

有关更多选项/原因,请参阅