А как то их все скрыть можно? Ведь сколько пользователи добавят видео, столько и будет таблиц с одинаковым id на странице. И их все надо скрыть на определенных страницах.
|
Друзья, ну неужели никто не знает, как это сделать? Второй день маюсь. Нужно скрыть несколько одинаковых таблиц в зависимости от того, какой урл. По айди понятно что не получится скрыть, т.к. одинаковых таблиц несколько. По name тоже не работает ни в таблицах ни в слоях. Есть вариант со стилями наверное, но как это реализовать?
|
Получить коллекцию таблиц по классу и в цикле все их последовательно скрыть.
|
Octane,
мдя, еще бы знать, как это сделать. |
Ну что ж Вы поиском пользоваться не умеете? :)
Ну ладно напишу здесь сложный вариант :D Для новых браузеров достаточно выполнить «getElementsByClassName», напишем функцию, которая будет выполнять тоже самое в старых браузерах:
function findClass(str, node) {
var node = node || document, list = node.getElementsByTagName('*'), length = list.length, Class = str.split(/\s+/), classes = Class.length, array = [], i, j, key;
for(i = 0; i < length; i++) {
key = true;
for(j = 0; j < classes; j++) if(list[i].className.search('\\b' + Class[j] + '\\b') == -1) key = false;
if(key) array.push(list[i]);
}
return array;
}
Функция получает все дочерние элементы указанного узла «node» или всего документа «document» и затем в цикле ищет элементы у которых в атрибуте «className» встречаются все указанные вами классы. Теперь для новых браузеров добавим native-функцию «getElementsByClassName», чтобы быстрее работало, для этого в нашу функцию «findClass» добавим условие и одну строчку в начале:
function findClass(str, node) {
if(document.getElementsByClassName) return (node || document).getElementsByClassName(str);
else {
var node = node || document, list = node.getElementsByTagName('*'), length = list.length, Class = str.split(/\s+/), classes = Class.length, array = [], i, j, key;
for(i = 0; i < length; i++) {
key = true;
for(j = 0; j < classes; j++) if(list[i].className.search('\\b' + Class[j] + '\\b') == -1) key = false;
if(key) array.push(list[i]);
}
return array;
}
}
Теперь рассмотрим как это можно использовать:
window.onload = function() { // После того как готов DOM
// В цикле пробегаем по всем найденным элементам и скрываем их
var i, list = findClass('audio'), length = list.length;
for(i = 0; i < length; i++) list[i].style.display = 'none';
};
В (X)HTML классы могут быть записаны как угодно: <table class="audio">…</table> <table class="audio table1">…</table> <table class="super audio">…</table> <table class="table2 audio disabled">…</table> во всех таблицах встречается CSS-класс «audio», и они будут скрыты. Вот :) не все так сложно, надо только немного постараться))) |
Octane,
два дня в гугле сижу, информация разрозненная, а как в кучу собрать ума не приложу. Вообще меня пугает джаваскрипт, стараюсь не пользоваться, но здесь никак без него. Спасибо огромное :) , сейчас буду разбираться, надеюсь заработает. |
а еще можно при добавлении видео дать таблице (если это php)
$id='video'.rand(1,999); а в js искать следующим образом
var tbl = document.getElementsByTagName('table');
for(var i=0; i<tbl.length; i++) {
if(tbl[i].id.indexOf('video') != -1) {
tbl[i].style.display = 'none';
}
}
ну конечно это все будет в зависимости от урла страницы и все id тоже будут уникальными |
HelpeR, ваше решение бестолковое и неэффективное по ряду причин:
|
Octane, да я не думал об этом когда писал код, я лишь предложил один из вариантов решения. Но и вашем случае если ему надо скрыть только таблицы с классами class='audio' как он написал в первом посте, то лучше при добавлении таблицы присваивать ей класс audio а в js с помощью моего метода уже не искать, а сравнивать имя класса таблицы.
tbl[i].className == 'audio' т.к. если ему придется оформить вторую таблицу с описанием и он захочет дать название классу audioDescription то и эта таблица тоже скроется, чего и не требовалось. |
Цитата:
Цитата:
|
| Часовой пояс GMT +3, время: 05:58. |