|
getElementsByClassName
Здравствуйте, помогите пожалуйста разобраться с getElementsByClassName.
Пол дня уже читаю мануалы и в конец запутался, как сделать рефреш перед началом функции? :blink: Пробывал добавить в функцию location.reload(), но работает не так, как надо. <html> <head> <style> p {margin:0px;} </style> <script type="text/javascript"> function find_c1() { var f1 = document.getElementById('layer').getElementsByClassName('c1') for (var i=0; i<f1.length; i++) f1[i].style.visibility = "hidden"; } function find_c2() { var f2 = document.getElementById('layer').getElementsByClassName('c2') for (var i=0; i<f2.length; i++) f2[i].style.visibility = "hidden"; } function find_c3() { var f3 = document.getElementById('layer').getElementsByClassName('c3') for (var i=0; i<f3.length; i++) f3[i].style.visibility = "hidden"; } function find_c4() { var f4 = document.getElementById('layer').getElementsByClassName('c4') for (var i=0; i<f4.length; i++) f4[i].style.visibility = "hidden"; } </script> </head> <body> <input id="but1" type="button" value="Убрать 1" onclick="find_c1()" /> <input id="but2" type="button" value="Убрать 2" onclick="find_c2()" /> <input id="but3" type="button" value="Убрать 3" onclick="find_c3()" /> <input id="but4" type="button" value="Убрать 4" onclick="find_c4()" /> <div id="layer" style="padding-top: 20px; padding-left: 40px;"> <p class="c1">100</p> <p class="c2">110</p> <p class="c3">120</p> <p class="c4">130</p> <p class="c1">140</p> <p class="c2">150</p> <p class="c3">160</p> <p class="c4">170</p> </div> </body> </html> |
такого метода нету
во всяком случае он некросбраузерен, поэтому для этой цели есть эмуляция http://javascript.ru/unsorted/top-10...lementsbyclass |
Цитата:
http://www.w3.org/TR/html5/dom.html#...ntsbyclassname Да, некроссбраузерен и декларирован в черновике спецификации HTML5, но тем не менее реализован более чем год (два?) тому назад в основных прогрессивных браузерах (IE, само собой, туда не входит, Opera 9.5+, FF3+). Кстати, по той же спецификации видно, что метод принимает один аргумент. А у Вас, denisok82, что передается вторым аргументом, да еще и необъявленной переменной? |
Вот так вроде работает, как думаете, правильно?
<script type="text/javascript"> function find_c1() { var f1 = document.getElementById('layer').getElementsByClassName('c1') for (var i=0; i<f1.length; i++) alert(i); } </script> |
Правильно, но, как отметил Gvozd, некроссбраузерно. Поэтому, если нужна поддержка IE, то придется использовать решение по ссылке выше.
|
По ссылке Гвоздя я посмотрел. Пока тяжела она еще для меня. Слишком там всё запутано. Пока впитываю знания, упражняюсь на ФФ.
|
Там нет ничего сложного.
if(document.getElementsByClassName) { // есть есть родная фукнция, используем ее getElementsByClass = function(classList, node) { return (node || document).getElementsByClassName(classList) // вызываем метод getElementsByClassName нужного узла. // если указан node, то будет произведен поиск в нем, иначе во всем документе } } else { // если родной функции нет, то будем обходить DOM getElementsByClass = function(classList, node) { var node = node || document, // узел, в котором ищем list = node.getElementsByTagName('*'), // выбираем все дочерние узлы length = list.length, // количество дочерних узлов classArray = classList.split(/\s+/), // разбиваем список классов classes = classArray.length, // длина списка классов result = [], i,j for(i = 0; i < length; i++) { // перебираем все дочерние узлы for(j = 0; j < classes; j++) { //перебираем все классы if(list[i].className.search('\\b' + classArray[j] + '\\b') != -1) { // если текущий узел имеет текущий класс result.push(list[i]) // запоминаем его break // прекращаем перебор классов } } } return result // возвращаем набор элементов } } |
B@rmaley.e><e,
Спасибо большое! Обязательно поковыряю этот кроссбраузерный вариант. [hr] А подскажите, я вот в первом посте обновил код и вопрос. Не найду никак нужного метода. Пытался вот так, но этот код не работает как было задумано: function find_c1() { window.location.reload(); // вот после этого не выполняются нижеследующие инструкции почему-то var f1 = document.getElementById('layer').getElementsByClassName('c1') for (var i=0; i<f1.length; i++) f1[i].style.visibility = "hidden"; } |
А с чего бы им выполняться, если после выполнения
location.reload()начнет ся переход на другую страницу (пусть и с таким же адресом)? |
У меня не хватает знаний. Укажите направление, куда копать? :write:
|
Часовой пояс GMT +3, время: 01:20. |
|