Скрыть родительский класс, если установлен флажок

#javascript #css #class #checkbox #parent

#javascript #css #класс #флажок #родительский

Вопрос:

Мне нужно скрыть первый класс ниже (wfob_wrap), когда установлен флажок (wfob_checkbox). Я пробовал много способов, но безуспешно.

Может ли кто-нибудь помочь мне с этим?

Спасибо!

 <div id="wfob_wrap" class="wfob_wrap_start">
  <div class="wfob_wrapper" data-wfob-id="72396">
    <div class="wfob_bump wfob_clear" data-product-key="wfob_5fb3c4fc409e4" data-wfob-id="72396">
      <div class="wfob_outer">
        <div class="wfob_Box">
          <div class="wfob_bgBox_table no_table">
            <div class="wfob_bgBox_tablecell no_table_cell wfob_check_container">
              <div class="wfob_order_wrap wfob_content_bottom_wrap">
                <div class="wfob_bgBox_table_box">
                  <div class="wfob_bgBox_cell wfob_img_box">
                    <div class="wfob_checkbox_input_wrap">
                      <span class="wfob_bump_checkbox">
                        <input type="checkbox" class="wfob_checkbox wfob_bump_product" checked="">
                      </span>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</div>
  

Комментарии:

1. Что-то вроде этого должно работать: document.querySelector(".wfob_checkbox").addEventListener("change", () => document.querySelector("#wfob_wrap > div").style.display = document.querySelector(".wfob_checkbox").checked ? "none" : "");

Ответ №1:

Вы можете использовать что-то вроде этого:

 document.querySelector('[type=checkbox]').addEventListener('change', e => {
  e.target.closest('#wfob_wrap').firstElementChild.style.display = 'none';
});  
 <div id="wfob_wrap" class="wfob_wrap_start">
  <div class="wfob_wrapper" data-wfob-id="72396">
    <div class="wfob_bump wfob_clear" data-product-key="wfob_5fb3c4fc409e4" data-wfob-id="72396">
      <div class="wfob_outer">
        <div class="wfob_Box">
          <div class="wfob_bgBox_table no_table">
            <div class="wfob_bgBox_tablecell no_table_cell wfob_check_container">
              <div class="wfob_order_wrap wfob_content_bottom_wrap">
                <div class="wfob_bgBox_table_box">
                  <div class="wfob_bgBox_cell wfob_img_box">
                    <div class="wfob_checkbox_input_wrap">
                      <span class="wfob_bump_checkbox">
                        <input type="checkbox" class="wfob_checkbox wfob_bump_product" checked="">
                      </span>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</div>  

Я использовал .closest(..) для получения #wfob_wrap элемента и .firstElementChild для получения первого дочернего элемента этого элемента.

В этом конкретном случае, поскольку элемент, который вы ищете, имеет идентификатор, который вам не нужен .closest(..) , вы можете получить этот элемент напрямую, используя document.getElementById('wfob_wrap') .

Комментарии:

1. Это не сработает, если флажок уже установлен

2. Нет необходимости использовать ближайший, когда у вас есть ID

Ответ №2:

Я дал два решения для javascript и jquery. Было ли это необходимо?

версия jquery:

 $('.wfob_checkbox.wfob_bump_product').click(function(){
  if($(this).is(':checked')) {
     $(this).closest('#wfob_wrap .wfob_wrapper').css('display', 'none');
  }
});  
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="wfob_wrap" class="wfob_wrap_start">
  <div class="wfob_wrapper" data-wfob-id="72396">
    <div class="wfob_bump wfob_clear" data-product-key="wfob_5fb3c4fc409e4" data-wfob-id="72396">
      <div class="wfob_outer">
        <div class="wfob_Box">
          <div class="wfob_bgBox_table no_table">
            <div class="wfob_bgBox_tablecell no_table_cell wfob_check_container">
              <div class="wfob_order_wrap wfob_content_bottom_wrap">
                <div class="wfob_bgBox_table_box">
                  <div class="wfob_bgBox_cell wfob_img_box">
                    <div class="wfob_checkbox_input_wrap">
                      <span class="wfob_bump_checkbox">
                        <input type="checkbox" class="wfob_checkbox wfob_bump_product">
                      </span>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</div>  

версия javascript:

 let checkbox = document.querySelector('.wfob_checkbox.wfob_bump_product');

checkbox.onclick = function() {
  if (this.checked) {
    this.closest('.wfob_wrapper').style.display = 'none';
  }
}  
 <div id="wfob_wrap" class="wfob_wrap_start">
  <div class="wfob_wrapper" data-wfob-id="72396">
    <div class="wfob_bump wfob_clear" data-product-key="wfob_5fb3c4fc409e4" data-wfob-id="72396">
      <div class="wfob_outer">
        <div class="wfob_Box">
          <div class="wfob_bgBox_table no_table">
            <div class="wfob_bgBox_tablecell no_table_cell wfob_check_container">
              <div class="wfob_order_wrap wfob_content_bottom_wrap">
                <div class="wfob_bgBox_table_box">
                  <div class="wfob_bgBox_cell wfob_img_box">
                    <div class="wfob_checkbox_input_wrap">
                      <span class="wfob_bump_checkbox">
                        <input type="checkbox" class="wfob_checkbox wfob_bump_product">
                      </span>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</div>  

Комментарии:

1. Это не сработает, если флажок уже установлен. Также нет необходимости в closest, когда у вас есть идентификатор

2. Это ответ на jQuery, вопрос не помечен jQuery.

3. @caramba, автор вопроса не сказал, что ему строго нужно для Javascript, и даже более того, я привел вторую версию для Javascript.

4. @mplungjan, автор вопроса не просил об этом в описании своей проблемы.

Ответ №3:

Попробуйте это

Он может обрабатывать, что флажок установлен при загрузке

Первый предназначен для одного флажка, затем второй для многих.

 const toggle = function() {
  const chk = document.querySelector(".wfob_checkbox");
  chk.closest(".wfob_wrapper").classList.toggle("hide", chk.checked)
};  
window.addEventListener("load",function() {
  document.querySelector(".wfob_checkbox").addEventListener("click",toggle)
  toggle()
});  
 .hide { display:none; }  
 <div id="wfob_wrap" class="wfob_wrap_start">
  <div class="wfob_wrapper" data-wfob-id="72396">
    <div class="wfob_bump wfob_clear" data-product-key="wfob_5fb3c4fc409e4" data-wfob-id="72396">
      <div class="wfob_outer">
        <div class="wfob_Box">
          <div class="wfob_bgBox_table no_table">
            <div class="wfob_bgBox_tablecell no_table_cell wfob_check_container">
              <div class="wfob_order_wrap wfob_content_bottom_wrap">
                <div class="wfob_bgBox_table_box">
                  <div class="wfob_bgBox_cell wfob_img_box">
                    <div class="wfob_checkbox_input_wrap">
                      <span class="wfob_bump_checkbox">
                        <input type="checkbox" class="wfob_checkbox wfob_bump_product">
                      </span>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</div>  

Если у вас больше наборов, вы не сможете использовать идентификаторы

 window.addEventListener("load", function() {
  document.getElementById("container").addEventListener("click", function(e) {
    const tgt = e.target;
    if (tgt.classList.contains("wfob_checkbox")) {
      tgt.closest(".wfob_wrap_start").querySelector(".wfob_wrapper").classList.toggle("hide", tgt.checked)
    }
  });
  
  // loading
  [...document.querySelectorAll(".wfob_checkbox:checked")].forEach(tgt => 
      tgt.closest(".wfob_wrap_start").querySelector(".wfob_wrapper").classList.toggle("hide", tgt.checked)
  )    
  
});  
 .hide {
  display: none;
}  
 <div id="container">

  <div class="wfob_wrap_start">
    <div class="wfob_wrapper" data-wfob-id="72396">
      <div class="wfob_bump wfob_clear" data-product-key="wfob_5fb3c4fc409e4" data-wfob-id="72396">
        <div class="wfob_outer">
          <div class="wfob_Box">
            <div class="wfob_bgBox_table no_table">
              <div class="wfob_bgBox_tablecell no_table_cell wfob_check_container">
                <div class="wfob_order_wrap wfob_content_bottom_wrap">
                  <div class="wfob_bgBox_table_box">
                    <div class="wfob_bgBox_cell wfob_img_box">
                      <div class="wfob_checkbox_input_wrap">
                        <span class="wfob_bump_checkbox">
                        <input type="checkbox" class="wfob_checkbox wfob_bump_product">
                      </span>
                      </div>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>

  <div class="wfob_wrap_start">
    <div class="wfob_wrapper" data-wfob-id="72396">
      <div class="wfob_bump wfob_clear" data-product-key="wfob_5fb3c4fc409e4" data-wfob-id="72396">
        <div class="wfob_outer">
          <div class="wfob_Box">
            <div class="wfob_bgBox_table no_table">
              <div class="wfob_bgBox_tablecell no_table_cell wfob_check_container">
                <div class="wfob_order_wrap wfob_content_bottom_wrap">
                  <div class="wfob_bgBox_table_box">
                    <div class="wfob_bgBox_cell wfob_img_box">
                      <div class="wfob_checkbox_input_wrap">
                        <span class="wfob_bump_checkbox">
                        <input type="checkbox" class="wfob_checkbox wfob_bump_product" checked>
                      </span>
                      </div>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>

</div>