【问题标题】:get parent or previous element based on child or sibling class根据子类或兄弟类获取父元素或上一个元素
【发布时间】:2021-04-16 00:46:55
【问题描述】:

假设我有三种不同类型的产品 HTML,我只想为那些有一个子元素或同级元素的产品选择 product-block 元素,并且输入元素的类为 mySelector。

  • 类型 A 包含包含“mySelector”的元素。
  • 类型 B 在其内部或下方没有元素“mySelector”,因此我们不想选择它。
  • Type C 后面有元素“mySelector”。

目标是选择类型 A 和 C 的产品块 <div>,它们有一个子级或兄弟级 mySelector。

产品块类型 A

<div class="A B C">
    <a href="#"></a>
    <input type="hidden" class="mySelector">
</div>

产品块类型 B

<div class="MM NN OO">
    <a href="#"></a>
</div>

产品块类型 C

<div class="X Y Z">
    <a href="#"></a>
</div>
<input type="hidden" class="mySelector">

我想过滤器可以工作,但我只能选择一种带有这样过滤器的产品块:

jQuery('.mySelector')
    .filter(function () {
        if (jQuery(this).prev().hasClass('Z')) {
           return jQuery(this).prev();
        }
    })

另一种方法是使用jQuery('.mySelector').parent()。但是我将无法选择 mySelector 是兄弟的类型 C。

【问题讨论】:

  • 同时使用(获取所有父级并获取所有上一个)然后与.add() 结合 - 请参阅stackoverflow.com/a/323969/2181514(不打算作为重复项)
  • 我刚遇到同一个。谢谢!

标签: jquery


【解决方案1】:

我按照@freedomn-m 的建议解决了。

let elmsa = jQuery('.mySelector').parent()
               .filter(function () {
                  if (jQuery(this).hasClass('A')) {
                   return this;
                  }
               });

let elmsb = jQuery('.mySelector').prev()
                .filter(function () {
                   if (jQuery(this).hasClass('X')) {
                       return this;
                   }
                });

let elms = jQuery.merge(elmsa, elmsb);

【讨论】:

    猜你喜欢
    • 2015-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多