Как включить эксклюзивную видимость с Bootstrap классами? - PullRequest
0 голосов
/ 09 апреля 2020

Так что в основном у меня есть функция jQuery, прикрепленная к некоторым значкам папок, которая переключает видимость различных элементов div:

$(document).ready(function() {
  $("#techfolder").click(function(){
    $("#txt").toggleClass("d-none");
  });
  $("#persfolder").click(function(){
    $("#txt2").toggleClass("d-none");
  });
  $("#linkfolder").click(function(){
    $("#txt3").toggleClass("d-none");
  });
});

Единственная проблема заключается в том, что если один элемент виден, а вы не нажимаете его папка исчезнет, ​​прежде чем щелкнуть другую папку, связанную с другим элементом, под первым появится новый видимый элемент. Я хочу сделать так, чтобы видимость была исключительной для этих элементов, и только один может отображаться одновременно. Я не могу понять, как это сделать.

Любая помощь с благодарностью!

1 Ответ

1 голос
/ 09 апреля 2020

это может быть не самый простой способ, но вы могли бы упомянуть все уникальные элементы в массиве, затем запустить проверку, чтобы увидеть, является ли элемент внутри элемента, на который вы нажали, дочерним, а затем переключить отображение нет .

Если это не прямой дочерний элемент, тогда запустите проверку, чтобы увидеть, активен ли 'd-none' или нет, затем переключите его.

Вероятно, есть гораздо более простой способ, но этот ответ основан на предположении, что вы сохраняете HTML таким, какой вы есть.

var arrayOfElements = [$("#txt"), $("#txt2"), $("#txt3")];

$('#techfolder, #persfolder, #linkfolder').click(function(){
 checkDisplayNone($(this));
});


function checkDisplayNone(elem) {
  innerElem =  elem.children();
  for (i = 0; i < arrayOfElements.length; i++) {
    if (innerElem[0].id !== arrayOfElements[i][0].id) {
      if (!arrayOfElements[i].hasClass('d-none'))
      arrayOfElements[i].toggleClass('d-none'); 
    } else {
    	arrayOfElements[i].toggleClass('d-none');
    }
  }
}
#techfolder {
  width: 100px;
  height: 100px;
  background: red;
  margin: 1rem;
}

#persfolder {
  width: 100px;
  height: 100px;
  background: blue;
  margin: 1rem;
}

#linkfolder {
  width: 100px;
  height: 100px;
  background: green;
  margin: 1rem;
}

.d-none {
  display: none;
}
<html>
<div id="techfolder">
  <div id="txt" class="d-none">
  text
  </div>
</div>
<div id="persfolder">
  <div id="txt2">
  text
  </div>
</div>
<div id="linkfolder">
  <div id="txt3">
  text
  </div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...