jQuery - 通过 class 在父级中选择未知名称的元素

jQuery - selecting element by class in parent with unknowing name

如果你能帮助我,我将不胜感激。我有工作代码,可以删除先前选择的元素中的 类:

$('.tag-list-item').click(function () {
  $('.tag-list-item').each(function (i, elem) {
    console.log(elem);
    $(elem).removeClass('tag-list-chosen');
  });
});

但现在我需要重建它以仅在具有共同父元素的元素中删除 类。 (原因是,一开始这段代码通过一个参数帮助我 select 块,现在参数数量增加了)。试图那样做,但没有成功:

$('.tag-list-item').click(function () {
  $('.tag-list-item').parent('.tag-list-item', this).each(function (i, elem) {
    console.log(elem);
    $(elem).removeClass('tag-list-chosen');
  });
});

整个HTML就是这样工作的。首先,我有两个列表(也许会有更多,我想创建通用的工作代码)带有标签:

<div class="row no-width-margin" id="selector-theme">
   <h5 class="tag-title">Tag group 1</h5>
      <ul class="tag-list">
         <li class="tag-list-item" data-theme="all-theme">All themes</li>
         <li class="tag-list-item" data-theme="holidays-theme">Holidays</li>
         <li class="tag-list-item" data-theme="spring-theme">Spring</li>
         <li class="tag-list-item" data-theme="new-year-theme">New year</li>
      </ul>
</div>
<div class="row no-width-margin" id="selector-sector">
   <h5 class="tag-title">Tag group 2</h5>
   <ul class="tag-list" style="padding: 0">
      <li class="tag-list-item" data-sector="all-sector">Все отрасли</li>
      <li class="tag-list-item" data-sector="cinema-sector">Movies</li>
      <li class="tag-list-item" data-sector="entertainment-sector">Entertainment</li>
   </ul>
</div>

和有几十张卡片的大块,每张卡片都具有这种结构(数据属性的内容不同):

<div class="file-box" data-theme="all-theme,holidays-theme" data-sector="all-sector,cinema-sector">
  <div class="file">
    <div class="image">
    </div>
    <div class="file-name">
    </div>
  </div>
</div>

当我单击列表中的标签时,没有 selected 标签的卡片会消失。

我做错了什么?

更新:此答案与问题编辑不匹配"When I click on the tag from the list, cards without selected tags are disappearing."


只要你的'mutual parent'有class或者其他的识别方式,就可以使用$(this).closest("parentclass"),例如:

$('.tag-list-item').click(function () {
    $(this).closest(".tag-list-parent")
           .find(".tag-list-item")
           .each(function (i, elem) {
                console.log(elem);
                $(elem).removeClass('tag-list-chosen');
           });

分解:

var mutualparent = $(this).closest(".parent-class");
va alltaglistsinparent = mutualparent.find(".tag-list-parent")

如果您没有 class,您可以使用包含的开发者,例如:

$(this).closest("div")...

或其他相关元素

$(this).closest("ul")...

如果他们都是siblings,即都在同一级别,那么你可以只使用上面的parent()或者你可以使用.siblings()有或没有.andSelf() 包括 this:

$('.tag-list-item').click(function () {
    $(this).siblings(".tag-list-item").andSelf()
           .each(function (i, elem) {
                console.log(elem);
                $(elem).removeClass('tag-list-chosen');
           });