Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 23.10.2008, 22:48
Новичок на форуме
Отправить личное сообщение для vovach Посмотреть профиль Найти все сообщения от vovach
 
Регистрация: 23.10.2008
Сообщений: 9

А как то их все скрыть можно? Ведь сколько пользователи добавят видео, столько и будет таблиц с одинаковым id на странице. И их все надо скрыть на определенных страницах.
Ответить с цитированием
  #12 (permalink)  
Старый 24.10.2008, 13:02
Новичок на форуме
Отправить личное сообщение для vovach Посмотреть профиль Найти все сообщения от vovach
 
Регистрация: 23.10.2008
Сообщений: 9

Друзья, ну неужели никто не знает, как это сделать? Второй день маюсь. Нужно скрыть несколько одинаковых таблиц в зависимости от того, какой урл. По айди понятно что не получится скрыть, т.к. одинаковых таблиц несколько. По name тоже не работает ни в таблицах ни в слоях. Есть вариант со стилями наверное, но как это реализовать?
Ответить с цитированием
  #13 (permalink)  
Старый 24.10.2008, 14:12
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Получить коллекцию таблиц по классу и в цикле все их последовательно скрыть.
Ответить с цитированием
  #14 (permalink)  
Старый 24.10.2008, 14:42
Новичок на форуме
Отправить личное сообщение для vovach Посмотреть профиль Найти все сообщения от vovach
 
Регистрация: 23.10.2008
Сообщений: 9

Octane,
мдя, еще бы знать, как это сделать.
Ответить с цитированием
  #15 (permalink)  
Старый 24.10.2008, 15:45
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Ну что ж Вы поиском пользоваться не умеете?
Ну ладно напишу здесь сложный вариант
Для новых браузеров достаточно выполнить «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, 24.10.2008 в 15:49.
Ответить с цитированием
  #16 (permalink)  
Старый 24.10.2008, 16:46
Новичок на форуме
Отправить личное сообщение для vovach Посмотреть профиль Найти все сообщения от vovach
 
Регистрация: 23.10.2008
Сообщений: 9

Octane,
два дня в гугле сижу, информация разрозненная, а как в кучу собрать ума не приложу. Вообще меня пугает джаваскрипт, стараюсь не пользоваться, но здесь никак без него. Спасибо огромное , сейчас буду разбираться, надеюсь заработает.
Ответить с цитированием
  #17 (permalink)  
Старый 24.10.2008, 18:25
Аватар для HelpeR
Профессор
Отправить личное сообщение для HelpeR Посмотреть профиль Найти все сообщения от HelpeR
 
Регистрация: 21.10.2008
Сообщений: 241

а еще можно при добавлении видео дать таблице (если это 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 тоже будут уникальными
Ответить с цитированием
  #18 (permalink)  
Старый 24.10.2008, 19:15
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

HelpeR, ваше решение бестолковое и неэффективное по ряду причин:
  • Для чего использовать генерацию уникальных идентификаторов, если для решения поставленной задачи подходят классы?
  • Генерация идентификатора случайным образом в пределах от 1 до 999, дает большой шанс вероятности, что идентификаторы совпадут, что не допустимо.
  • Как верстальщику при таком подходе оформить все однотипные таблицы, ведь он не знает какой будет идентификатор, или в CSS написать все возможные варианты от 1 до 999? Придётся дописать классы для каждой таблицы, получится лишний код.
  • Хоть и не значительная, но все же лишняя нагрузка на сервер.

Последний раз редактировалось Octane, 24.10.2008 в 19:19.
Ответить с цитированием
  #19 (permalink)  
Старый 24.10.2008, 20:45
Аватар для HelpeR
Профессор
Отправить личное сообщение для HelpeR Посмотреть профиль Найти все сообщения от HelpeR
 
Регистрация: 21.10.2008
Сообщений: 241

Octane, да я не думал об этом когда писал код, я лишь предложил один из вариантов решения. Но и вашем случае если ему надо скрыть только таблицы с классами class='audio' как он написал в первом посте, то лучше при добавлении таблицы присваивать ей класс audio а в js с помощью моего метода уже не искать, а сравнивать имя класса таблицы.
tbl[i].className == 'audio'

т.к. если ему придется оформить вторую таблицу с описанием и он захочет дать название классу audioDescription то и эта таблица тоже скроется, чего и не требовалось.
Ответить с цитированием
  #20 (permalink)  
Старый 24.10.2008, 21:19
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Сообщение от HelpeR Посмотреть сообщение
Но и вашем случае если ему надо скрыть только таблицы с классами class='audio' как он написал в первом посте, то лучше при добавлении таблицы присваивать ей класс audio а в js с помощью моего метода уже не искать, а сравнивать имя класса таблицы.
tbl[i].className == 'audio'
Так делать неправильно! Для одного элемента можно записать несколько классов через пробел.

Сообщение от HelpeR Посмотреть сообщение
он захочет дать название классу audioDescription то и эта таблица тоже скроется, чего и не требовалось.
Эта таблица не скроется, поиск в строке с именами классов идет учитывая разделители слов.

Последний раз редактировалось Octane, 24.10.2008 в 21:21.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скрыть ссылку на js Googert Общие вопросы Javascript 10 21.02.2012 17:29