есть меню открытия окон
<div class="meny">
<button onClick="document.getElementById('hide1').style.display='none';document.getElementById('hide2').style.display='none';
document.getElementById('hide3').style.display='none'; collapsElement('hide')">ОКНО1</button>
<button onClick="document.getElementById('hide').style.display='none';document.getElementById('hide2').style.display='none';
document.getElementById('hide3').style.display='none';collapsElement('hide1')">ОКНО2</button>
<button onClick="document.getElementById('hide').style.display='none';document.getElementById('hide1').style.display='none';
document.getElementById('hide3').style.display='none';collapsElement('hide2')">ОКНО3</button>
<button onClick="document.getElementById('hide').style.display='none';document.getElementById('hide1').style.display='none';
document.getElementById('hide2').style.display='none';collapsElement('hide3')">ОКНО4</button>
и так далее
</div>
можно ли это как то сделать попроще
Можно так написать. А вообще "проще" - слова размытое.
<script>
var arr = ['hide', 'hide1', 'hide2', 'hide3']
function collapsElementId(id){
for(var i=0; i<arr.length; i++) {
if (i!=id) document.getElementById(arr[i]).style.display='none';
}
collapsElement(arr[id]);
}
</script>
<div class="meny">
<button onClick="collapsElementId(0);>ОКНО1</button>
<button onClick="collapsElementId(1);>ОКНО2</button>
<button onClick="collapsElementId(2);>ОКНО3</button>
<button onClick="collapsElementId(3);>ОКНО4</button>
и так далее
</div>
$("button").click(function(){
var bid = $(this).attr("id");
$(".forhide").hide();
var nid = bid.replace("btn", "");
$("#wnd" + nid).show();
});
.forhide {
border: 1px solid black;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
<button id="btn1">ОКНО1</button>
<button id="btn2">ОКНО2</button>
<button id="btn3">ОКНО3</button>
<button id="btn4">ОКНО4</button>
</div>
<div id="wnd1" class="forhide">1</div>
<div id="wnd2" class="forhide">2</div>
<div id="wnd3" class="forhide">3</div>
<div id="wnd4" class="forhide">4</div>
Ответ похож на ответ @DanIrkutskiy, но смысл в том, что в функцию передаем не индекс, а имя идентификатора. Добавим класс 'hide'
к элементам, которые будем скрывать и отображать, это для удобства, чтобы получить все элементы через getElementsByClassName
. Если исходить из ваших условий и немного дополнить их, то так:
function myFunc(id) {
hideElements = document.getElementsByClassName('hide');
for (var index = 0; index < hideElements.length; index++) {
if (hideElements[index].id !== id) {
hideElements[index].style.display = 'none';
} else {
collapsElement(id);
}
}
}
function collapsElement(id) {
document.getElementById(id).style.display = 'block'; // для наглядности
}
.hide {}
<div class="meny">
<div id="hide" class="hide">0</div>
<div id="hide1" class="hide">1</div>
<div id="hide2" class="hide">2</div>
<div id="hide3" class="hide">3</div>
<button onClick="myFunc('hide');">Window 0</button>
<button onClick="myFunc('hide1');">Window 1</button>
<button onClick="myFunc('hide2');">Window 2</button>
<button onClick="myFunc('hide3');">Window 3</button>
</div>
Виртуальный выделенный сервер (VDS) становится отличным выбором