Скрытие блоков
есть код:
<html> <head> <script type="text/javascript"> <!-- function open_reshenie(reshenie) { var obj=document.getElementById(reshenie); if(obj.style.display=='none') obj.style.display='block'; else obj.style.display='none'; } --> </script> </head> <body> <p><a href='javascript: open_reshenie(1)'>Открыть решение задачи 1</a> <div ID=1 Style='text-indent:0pt;display:none'><p>решение 1</div> <p><a href='javascript: open_reshenie(2)'>Открыть решение задачи 2</a> <div ID=2 Style='text-indent:0pt;display:none'><p>решение 2</div> <p><a href='javascript: open_reshenie(3)'>Открыть решение задачи 3</a> <div ID=3 Style='text-indent:0pt;display:none'><p>решение 3</div> </body> </html> нужно сделать так чтобы при клике по ссылке закрывался предыдущий блок и открывался блок именно той задачи которую мы хотим. Помогите плиз. :( |
во первых закрой все теги <p>
|
я знаю что рабочий. просто нужно как то доработать чтобы при открытие другого решения предыдущее закрывалось.
|
<html> <head> <script type="text/javascript"> function open_reshenie(reshenie) { var reg = /^d\d{1,}$/; var divs = document.getElementsByTagName('div'); for(var i = 0; i<divs.length; i++) if(divs[i].id.search(reg) + 1 && divs[i].id!=reshenie) divs[i].style.display='none'; var obj=document.getElementById(reshenie); obj.style.display=='none' ? obj.style.display='block' : obj.style.display='none'; } </script> </head> <body> <div><a href='javascript: open_reshenie("d1")'>Открыть решение задачи 1</a></div> <div id="d1" style='text-indent:0pt;display:none'>решение 1</div> <div><a href='javascript: open_reshenie("d2")'>Открыть решение задачи 2</a></div> <div id="d2" style='text-indent:0pt;display:none'>решение 2</div> <div><a href='javascript: open_reshenie("d3")'>Открыть решение задачи 3</a></div> <div id="d3" style='text-indent:0pt;display:none'>решение 3</div> </body> </html> |
спасибо огромное :thanks: ... слушай еще вопрос: што это такое? reg = /^d\d{1,}$/;
|
регулярное выражение.
В данном случаи суть этого выражения d+цифры(длиной от 1 до дохрена). |
ну все ясно премного благодарен
|
Skipp,
А что такое "+1" здесь-> divs[i].id.search(reg) + 1, ищём id в названии, которого на цифру 1 больше? |
как я понял скрывать нужно каждый следующий тег <div> и если id не является равным id ссылки
|
Вы же не будете связывать таким образом, по id, 10 000 блоков? (Да и, кстати, параметр id не должен начинаться с цифры :) )
Нужно другое решение.
Это сильно упростит Вашу задачу. :) Для примера, можете открыть в опере opera:config и поковыряться в ней дебаггером. |
Несколько вопросов к автору скрипта.
1. Не знал, что значение переменной может одновременно быть выражением. var reg = /^d\d{1,}$/; 2. Зачем два раза писать var? Почему нельзя задать переменные через запятую, таким образом: var reg = /^d\d{1,}$/, divs = document.getElementsByTagName('div'); 3. На сколько я знаю при for, значение переменной записывается уже в for (пример: (i = 1; i <= 10; i++)... и зачем в скобках опять писать var? 4. Что значит, &&? 5. Объясните вообще дословно, построчно как все это действует. Думаю это будет очень хорошим уроком по javascript. Так что если не трудно. Кстати кто понимает, думаю не помешает и ваши комментарии. Заранее спасибо |
Цитата:
Так если стока не найдена то получится -1 + 1 = 0(false), если найдёт, а найти получится, только начиная с первого элемента (в выражении), то получится 0 + 1 = 1 (true). |
Цитата:
2. Почему же можно, это чисто желание программиста. Я вот решил написать так=) 3. Честно не помню откуда у меня такая привычка появилась и не помню зачем, сам бы хотел узнать. А так вообще по мучай вот этот код, запусти а потом удали var в цикле и ещё раз запусти=) Если поймёшь, зачем я так сделал напиши=))) <script type="text/javascript"> var i = 32; function open_reshenie(reshenie) { alert(i); var reg = /^d\d{1,}$/; var divs = document.getElementsByTagName('div'); for(var i = 0; i<divs.length; i++) if(divs[i].id.search(reg) + 1 && divs[i].id!=reshenie) divs[i].style.display='none'; alert(i); var obj=document.getElementById(reshenie); obj.style.display=='none' ? obj.style.display='block' : obj.style.display='none'; } </script> 4. Логический оператор (И). 5. var reg = /^d\d{1,}$/; //регулярное выражение, его суть (начало строки + d + числовое значение от 1 символа до дохрена) =) var divs = document.getElementsByTagName('div'); // Получаем все элементы div находящиеся на странице for(var i = 0; i<divs.length; i++) //Запускаем цикл if(divs[i].id.search(reg) + 1 && divs[i].id!=reshenie) divs[i].style.display='none'; // задаем всем дивам с id == d + числовое значение стиль display='none', кроме того что нам надо показать var obj=document.getElementById(reshenie); //Получаем элемент блока, который необходимо вывести obj.style.display=='none' ? obj.style.display='block' : obj.style.display='none'; //Проверяем стиль display если он равен none то делаем его равным block, а если block , то делаем его равным none В общем как-то так. Я сам ещё ток начал учить, понимать тонкости js, поэтому сильно не ругайте, если что не понятно и не по батенски=) |
Цитата:
|
В учебнике, не всегда найти, то что можно понять.
|
Грамотный ответ!!!
Правда не пойму для чего тут alert??? Var в цикле убирал, но не понял))) Особенно понравился ответ на пятый вопрос, спасибо))) Кстати на счет захудалых учебниках... может подскажешь, что нибудь хорошее??? |
Цитата:
|
Ок. спасибо,:thanks:
но я его уже почитываю... А есть еще где по проще? |
Часовой пояс GMT +3, время: 14:54. |