|
простой show/hide для контента
Всем привет! ;)
Вот тут у Гугла сделано так - есть ссылки и есть скрытый конетнт под ними, при нажатии на ссылку этот контент открывается, при нажатии на ссылку ниже верхний скрывается, а нижний открывается и так далее... Хотелось бы сделать что-то подобное, посмотрел скрипт Гугла - там вроде все просто, но хотелось бы еще проще, так как мне не нужно лишнего. Вот код гугла function initTrainingVids() { var vidLinks = []; var allLinks = document.getElementsByTagName('a'); for(var i = 0, tag; tag = allLinks[i]; i++) { if(tag.className == 'vid') { vidLinks[vidLinks.length] = tag; } } for(var i = 0, vid; vid = vidLinks[i]; i++) { // Get YouTube video ID var vidId = vid.href.slice(vid.href.indexOf('=')+1); // Find object to add video to var vidTarget = vid.parentNode.parentNode.getElementsByTagName('div'); vidTarget = vidTarget[vidTarget.length - 1]; /** while(vidTarget.nodeName.toLowerCase() != 'div' && vidTarget.className != 'vid') { vidTarget = vidTarget.nextSibling; } **/ // Attach onclick event vid.onclick = function(target, src) { return function() { if(target.style.display != 'block') { var vidTag = '<iframe src="http://www.youtube.com/v/'+src+'"></iframe>'; target.innerHTML = vidTag; var allDivs = document.getElementsByTagName('div') for(var i = 0, div; div = allDivs[i]; i++) { if(div.className == 'vid' && div.style.display == 'block') { div.style.display = 'none'; } } target.style.display = 'block'; } else { target.innerHTML = ''; target.style.display = 'none'; } return false; }; }(vidTarget, vidId); } } пытался самостоятельно изменить его, но так ничего и не получилось (с програмиированием у меня не очень хорошо) :( мне нужно просто что-то типа этого: <a href="#" onclick="show (div1)">LINK1</a> <div id=div1> СОДЕРЖАНИЕ1 <div> <a href="#" onclick="show (div2)">LINK2</a> <div id=div2> СОДЕРЖАНИЕ2 <div> <a href="#" onclick="show (div3)">LINK3</a> <div id=div3> СОДЕРЖАНИЕ3 <div> при этом, когда жму на ЛИНК1 то открывается СОДЕРЖАНИЕ1, когда жму на ЛИНК2 открывается СОДЕРЖАНИЕ2, а СОДЕРЖАНИЕ1 закрывается и т.д. Нашел также скрипты, которые просто открывают/закрывают свой слой, но чтобы открывали свой, а закрывали чужие - не нашел.... Заранее спасибо! |
M.C.,
Можете попробовать вот такой вариант. Он может показаться не самым простым, для человека незнакомым с javascript, но я смог быстро придумать только это: <html> <head> <script> // Обворачиваем функцию toggle в локальное замыкание: var toggle = function() { // Ссылка на текущий открытый div: var currentDiv = null; // Функция для "раскрытия" элемента: function open(divElement) { // Тут можно добавить эффект "плавного" открытия: divElement.style.display = "block"; currentDiv = divElement; } // Функция для "закрытия" элемента: function close(divElement) { // Тут можно добавить эффект "плавного" закрытия: divElement.style.display = "none"; currentDiv = null; } // Возвращаем функцию, которая будет вызываться по toggle() return function(divID) { // Получаем элемент из DOM var divElement = document.getElementById(divID); // Если такой есть: if (divElement) { // Если уже открыт какой-то div - закрываем. if(currentDiv != null) close(currentDiv); // Открываем вызваный. open(divElement); } } // Вызываем нашу "обертку", теперь toggle() вызывает функцию, описанную по "return" }(); </script> <style> .myDiv { display: none; } </style> </head> <body> <a href="javascript://" onClick="toggle('div1')">Link1</a> <div class="myDiv" id="div1"> Содержание<br /> Содержание<br /> Содержание<br /> Содержание<br /> Содержание<br /> Содержание<br /> Содержание<br /> </div> <br /> <a href="javascript://" onClick="toggle('div2')">Link2</a> <div class="myDiv" id="div2"> Содержание<br /> Содержание<br /> Содержание<br /> Содержание<br /> Содержание<br /> Содержание<br /> Содержание<br /> </div> <br /> <a href="javascript://" onClick="toggle('div3')">Link3</a> <div class="myDiv" id="div3"> Содержание<br /> Содержание<br /> Содержание<br /> Содержание<br /> Содержание<br /> Содержание<br /> Содержание<br /> </div> <br /> </body> </html> |
Андрей Параничев,
огромное вам человеческое СПАСИБО! все работает отлично! буду разбирать ваш код для дальнейшего обучения! ;) Удачи! |
уважаемый, а как бы еще добавить, чтобы при нажатии на туже ссылку, если ее слой открыт он бы закрывался?
|
M.C.,
Замените функцию, возвращаемую по return на такую: // Возвращаем функцию, которая будет вызываться по toggle() return function(divID) { // Получаем элемент из DOM var divElement = document.getElementById(divID); // Если такой есть: if (divElement) { // Если уже открыт этот div, то просто закрываем. if (divElement === currentDiv) { close(currentDiv); // Если открыт другой div, то закрываем и открываем текущий: } else if(currentDiv != null) { close(currentDiv); open(divElement); // Иначе - просто открываем: } else { open(divElement); } } } |
и еще раз огромное СПАСИБО! ;)
|
а подскажите пожалуйста как сделать так, чтобы по нажатию на ссылку (Link[i]) сама ссылка скрывалась, а открывалось содержание соответствующего ей тега div ?
|
and50,
Запоминать её, точно так же как div, при открытии - скрывать, при закрытии - показывать. Что-то на подобии этого: <html> <head> <script> // Обворачиваем функцию toggle в локальное замыкание: var toggle = function() { // Ссылка на текущий открытый div: var currentDiv = null; // Текущая ссылка: var currentAnchor = null; // Функция для "раскрытия" элемента: function open(divElement, linkElement) { // Запоминаем и прячем ссылку: currentAnchor = linkElement; currentAnchor.style.display = "none"; // Тут можно добавить эффект "плавного" открытия: divElement.style.display = "block"; currentDiv = divElement; } // Функция для "закрытия" элемента: function close(divElement) { // Показываем ссылку и "забываем": currentAnchor.style.display = "inline"; currentAnchor = null; // Тут можно добавить эффект "плавного" закрытия: divElement.style.display = "none"; currentDiv = null; } // Возвращаем функцию, которая будет вызываться по toggle() return function(divID, link) { // Получаем элемент из DOM var divElement = document.getElementById(divID); // Если такой есть: if (divElement) { // Если уже открыт какой-то div - закрываем. if(currentDiv != null) close(currentDiv); // Открываем вызваный. open(divElement, link); } } // Вызываем нашу "обертку", теперь toggle() вызывает функцию, описанную по "return" }(); </script> <style> .myDiv { display: none; } </style> </head> <body> <a href="javascript://" onClick="toggle('div1', this)">Link1</a> <div class="myDiv" id="div1"> Содержание<br /> Содержание<br /> Содержание<br /> Содержание<br /> Содержание<br /> Содержание<br /> Содержание<br /> </div> <br /> <a href="javascript://" onClick="toggle('div2', this)">Link2</a> <div class="myDiv" id="div2"> Содержание<br /> Содержание<br /> Содержание<br /> Содержание<br /> Содержание<br /> Содержание<br /> Содержание<br /> </div> <br /> <a href="javascript://" onClick="toggle('div3', this)">Link3</a> <div class="myDiv" id="div3"> Содержание<br /> Содержание<br /> Содержание<br /> Содержание<br /> Содержание<br /> Содержание<br /> Содержание<br /> </div> <br /> </body> </html> |
большое спасибо.
|
помогите плз сделать код чуть по проще:)
<html> <head> <script> // Обворачиваем функцию toggle в локальное замыкание: var toggle = function(divID1, divID2, divID3, divID4, divID5, divID6, divID7, divID8, divID9, divID10, divID11, divID12, divID13, divID14, divID15) { // Ссылка на текущий открытый div: var currentDiv1 = document.getElementById(divID1); var currentDiv2 = document.getElementById(divID2); var currentDiv3 = document.getElementById(divID3); var currentDiv4 = document.getElementById(divID4); var currentDiv5 = document.getElementById(divID5); var currentDiv6 = document.getElementById(divID6); var currentDiv7 = document.getElementById(divID7); var currentDiv8 = document.getElementById(divID8); var currentDiv9 = document.getElementById(divID9); var currentDiv10 = document.getElementById(divID10); var currentDiv11 = document.getElementById(divID11); var currentDiv12 = document.getElementById(divID12); var currentDiv13 = document.getElementById(divID13); var currentDiv14 = document.getElementById(divID14); var currentDiv15 = document.getElementById(divID15); // Текущая ссылка: // Функция для "раскрытия" элемента: // Запоминаем и прячем ссылку: // currentAnchor = linkElement; // if (currentAnchor.style.display = "none") // {currentAnchor.style.display = "block"} // else // {currentAnchor.style.display = "none"} // вырубаем все currentDiv1.style.display = "block"; currentDiv2.style.display = "block"; currentDiv3.style.display = "block"; currentDiv4.style.display = "block"; currentDiv5.style.display = "block"; currentDiv6.style.display = "none"; currentDiv7.style.display = "none"; currentDiv8.style.display = "none"; currentDiv9.style.display = "none"; currentDiv10.style.display = "none"; currentDiv11.style.display = "none"; currentDiv12.style.display = "none"; currentDiv12.style.display = "none"; currentDiv13.style.display = "block"; currentDiv14.style.display = "block"; currentDiv15.style.display = "none"; }; </script> <style> .myDiv { display: none; } .style1 {color: #CC6666} </style> </head> <body> <span class="style1">здесь будет меню</span><br> <!--выводим блок меню --> <div id="lMenuUp1"> <strong>Меню1</strong><br> </div> <div id="lMenuUp2"> <strong>Меню2</strong><br> </div> <div id="lMenuUp3"> <strong>Меню3</strong><br> </div> <div class="myDiv" id="submenu1"> Пункт 11<br> Пункт 12<br> </div> <div class="myDiv" id="submenu2"> Пункт 21<br> Пункт 22<br> </div> <div class="myDiv" id="submenu3"> Пункт 31<br> Пункт 32<br> </div> <div class="myDiv" id="lMenuDown1"> <strong>Меню1</strong><br> </div> <div class="myDiv" id="lMenuDown2"> <strong>Меню2</strong><br> </div> <div class="myDiv" id="lMenuDown3"> <strong>Меню3</strong><br> </div> <hr> <div class="myDiv" id="div1"> Содержание<br /> Содержание<br /> Содержание<br /> Содержание<br /> Содержание<br /> Содержание<br /> Содержание<br /> </div> <div class="myDiv" id="div2"> Содержание1<br /> Содержание1<br /> Содержание1<br /> Содержание1<br /> Содержание1<br /> Содержание1<br /> Содержание1<br /> </div> <div class="myDiv" id="div3"> Содержание2<br /> Содержание2<br /> Содержание2<br /> Содержание2<br /> Содержание2<br /> Содержание2<br /> Содержание2<br /> </div> <a href="javascript://" onClick="toggle('lMenuUp1', 'submenu1', 'lMenuDown2', 'lMenuDown3', 'div1', 'lMenuUp2', 'lMenuUp3', 'submenu2', 'submenu3', 'lMenuDown1', 'div2', 'div3', 'link2', 'link3', 'link1')" id='link1'>Link1</a><br> <a href="javascript://" onClick="toggle('lMenuDown1', 'lMenuUp2', 'lMenuDown3', 'submenu1', 'div2', 'submenu2', 'submenu3', 'lMenuUp1', 'lMenuDown2', 'lMenuUp3', 'div1','div3', 'link1', 'link3', 'link2')" id='link2'>Link2</a><br> <a href="javascript://" onClick="toggle('lMenuUp3', 'submenu3', 'lMenuDown1', 'lMenuDown2', 'div3', 'lMenuUp1', 'lMenuUp2', 'submenu1', 'submenu2', 'lMenuDown3', 'div1', 'div2', 'link1', 'link3', 'link3')" id='link3'>Link3</a><br> <hr> </body> </html> а то как то страшно выглядит |
Часовой пояс GMT +3, время: 18:11. |
|