首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单击隐藏元素,而不是单击具有相同类的其他元素。

单击隐藏元素,而不是单击具有相同类的其他元素。
EN

Stack Overflow用户
提问于 2018-11-22 11:31:03
回答 5查看 267关注 0票数 0

如果“这个类”存在,我想隐藏一个元素,但是父类与其他元素共享同一个类。

基本上,HTML是:

代码语言:javascript
复制
<div class="mailing-list">
   <input type="submit">
</div>

<div class="mailing-list">
   <input type="submit">
</div>

<div class="mailing-list">
   <input type="submit">
</div>

如果单击该按钮,它将向单击的元素添加以下内容:<span class="confirm">Joined</span>

我想知道的是,如果存在class="confirm",只为单击的元素隐藏输入,而不是全部。

我试着:

代码语言:javascript
复制
$("#org-lists").each(function() {
   $(this).find(".mailing-list").each(function() {
     if($('.confirm').length) {
       $('#org-lists .mailing-list').find('input[type="submit"]').hide();
     }
   });
});
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2018-11-22 11:48:40

除了现有的答案之外,还可以使用:has https://api.jquery.com/has-selector/

代码语言:javascript
复制
$('.mailing-list:has(.confirm) input[type="submit"]').hide();

要修复原始代码,需要添加this以提供:

代码语言:javascript
复制
$("#org-lists").each(function() {
    // this = org-list
    $(this).find(".mailing-list").each(function() {
        // this = mailing-list
        // find if this mailing-list has a confirm (need >0 check)
        if ($(this).find('.confirm').length > 0) {
            // this still = mailing-list
            $(this).find('input[type="submit"]').hide();
        }
   });
});
票数 0
EN

Stack Overflow用户

发布于 2018-11-22 11:36:48

您需要将其绑定到click事件:

代码语言:javascript
复制
$('.mailing-list > input').on('click', function() {
  var $input = $(this),
    $parent = $input.parent();  // this is the mailing list
    
  $parent.append('<span class="confirm">Joined</span>'); // add joined span
  $input.hide(); // hide input
});
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="mailing-list">
   <input type="submit">
</div>

<div class="mailing-list">
   <input type="submit">
</div>

<div class="mailing-list">
   <input type="submit">
</div>

如果要在循环中独立于click事件执行此操作,则可以使用筛选器:

代码语言:javascript
复制
$('.mailing-list').filter(function() {
  return $(this).children('.confirm').length;  // filter any mailing lists with a child of confirm
})
.children('input')  // get the inputs of the filtered
.hide();            // hide them
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="mailing-list">
  <input type="submit">
  <span class="confirm">Joined</span>
</div>

<div class="mailing-list">
  <input type="submit">
</div>

<div class="mailing-list">
  <input type="submit">
</div>

听起来,如果无法将DOM绑定到单击,则需要观察DOM以运行上述循环:

代码语言:javascript
复制
$('.mailing-list > input').on('click', function() {  
  $(this).parent().append('<span class="confirm">Joined</span>'); // add joined span - this is other code not important
});

// Select the node that will be observed for mutations
var targetNodes = document.querySelectorAll('.mailing-list');

// Options for the observer (which mutations to observe)
var config = { attributes: false, childList: true, subtree: false };

// Callback function to execute when mutations are observed
var callback = function(mutationsList, observer) {   
    for(var mutation of mutationsList) {
        if (mutation.type == 'childList') {
          $('.mailing-list').filter(function() {
  return $(this).children('.confirm').length;  // filter any mailing lists with a child of confirm
})
.children('input')  // get the inputs of the filtered
.hide();            // hide them
        }
    }
};

// Create an observer instance linked to the callback function
var observer = new MutationObserver(callback);

// watch the mailing list divs
for (i = 0; i < targetNodes.length; i++) {
  observer.observe(targetNodes[i], config);
}
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="mailing-list">
   <input type="submit">
</div>

<div class="mailing-list">
   <input type="submit">
</div>

<div class="mailing-list">
   <input type="submit">
</div>

票数 1
EN

Stack Overflow用户

发布于 2018-11-22 11:38:52

隐藏输入元素并将span标记追加到其父类

代码语言:javascript
复制
$('input').click(function(){
  $(this).hide();
  $(this).parent().append('<span class="confirm">Joined</span>');
});
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="mailing-list">
   <input type="submit">
</div>

<div class="mailing-list">
   <input type="submit">
</div>

<div class="mailing-list">
   <input type="submit">
</div>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53430015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档