powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / getElementsByClassName vs IE
24 сообщений из 24, страница 1 из 1
getElementsByClassName vs IE
    #38420539
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Написал примитивный код
Код: javascript
1.
2.
3.
4.
5.
function ShowOrHide(Srh,St,Dspl){
	if(!Dspl){Dspl='block';}
	var elem=document.getElementsByClassName(Srh);
	for (var i = 0; i < elem.length; i++){elem[i].style.display=(St==true)?Dspl:"none";}
}


но Internet Explorer 8 ругается на строку var elem=document.getElementsByClassName(Srh);
В Srh я передаю название класса. На всех остальных браузерах работает, на IE не хочет.
...
Рейтинг: 0 / 0
getElementsByClassName vs IE
    #38420560
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей159, getElementsByClassName поддерживается начиная с ie9 ( caniuse , msdn )
...
Рейтинг: 0 / 0
getElementsByClassName vs IE
    #38420584
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо. Так и подозревал.
Думаю то что я нашел должно помочь. FTP err...что-то за столько время только сейчас не пускает проверить

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
function ShowOrHide(Srh,St,Dspl){
	if(!Dspl){Dspl='block';}
	var elem=CROSgetElementsByClassName(Srh);//document.getElementsByClassName(Srh);
	for (var i = 0; i < elem.length; i++){elem[i].style.display=(St==true)?Dspl:"none";}
}


function CROSgetElementsByClassName(Srh){
	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 // возвращаем набор элементов
		}
	}
}
...
Рейтинг: 0 / 0
getElementsByClassName vs IE
    #38420588
Фотография user89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей159,

если браузер не поддерживает getElementsByClassName, то его можно заменить на такую функцию
http://javascript.ru/unsorted/top-10-functions#8-getelementsbyclass
...
Рейтинг: 0 / 0
getElementsByClassName vs IE
    #38420610
st_st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
querySelectorAll если забить на IE7.
...
Рейтинг: 0 / 0
getElementsByClassName vs IE
    #38420651
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Круто! Сейчас попробую. Идея механизма даже нравится лучше чем get..id & get..class
...
Рейтинг: 0 / 0
getElementsByClassName vs IE
    #38420662
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ух блин! На сколько полезная функция! Большое спасибо!!
...
Рейтинг: 0 / 0
getElementsByClassName vs IE
    #38420680
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей159Ух блин! На сколько полезная функция! Большое спасибо!!по разнообразию селекторов она слегка уступает jquery и примерно соответствует css3.

а вот то, что она есть в IE8 - для меня сюрприз. не ожидаль.
...
Рейтинг: 0 / 0
getElementsByClassName vs IE
    #38420692
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яростный МечАндрей159Ух блин! На сколько полезная функция! Большое спасибо!!по разнообразию селекторов она слегка уступает jquery и примерно соответствует css3.Насколько я понимаю, она соответствует набору селекторов, поддерживаемых браузером. Механизм же тот же самый, что в css.
...
Рейтинг: 0 / 0
getElementsByClassName vs IE
    #38420776
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яростный МечАндрей159Ух блин! На сколько полезная функция! Большое спасибо!!по разнообразию селекторов она слегка уступает jquery и примерно соответствует css3.
а вот то, что она есть в IE8 - для меня сюрприз. не ожидаль.

jquery не хочу использовать так как это чужой код и до мелочей не знаю что и как там.

Разновидность бравзеров также проблематична из-за иллюзии "Мы лучше", поскольку через их "Мы" я должен клиенту впаривать ненужные байты с: -moz-херня, -webkit-херня, -ms-херня, -o-херня... Вместо того чтоб укоротить код мы его только удлиняем. Можно код выдавать по условию для каждого бравзера, но люди умудряются выдавать один бравзер за другой с какой-то своей целю и для этого упрощения я еще не нашел подход. Я только 5 месяцев парюсь с нуля над сайтом, может и найду решение.
...
Рейтинг: 0 / 0
getElementsByClassName vs IE
    #38420791
Zoria
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей159jquery не хочу использовать
мне кажется, со временем и это пройдет.. он себя уже слава богу, годами зарекомендовал.
а использовать нужно да, только то, что понятно :)
...
Рейтинг: 0 / 0
getElementsByClassName vs IE
    #38420822
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZoriaАндрей159jquery не хочу использовать
мне кажется, со временем и это пройдет.. он себя уже слава богу, годами зарекомендовал.
а использовать нужно да, только то, что понятно :)

"не хочу...до мелочей не знаю", имея ввиду смысл, что этот код никем не проверен чтоб подтвердить что он на 100% не занимается лишним и ненужным, той же статистикой, воровством и т.д. Зная как некоторые вещи делаются легко, даже любая анимация (передвижение, затухание и т.д.) - непонятно остается: зачем столько прессованного кода. Ява все умеет. Почему бы не поделиться просто набором уникальных крос-функций. А нет. Не станет никто этого делать. Легче впарить типа "jquery" и все на крючку. Мне интересна технология GET POST непосредственно через элемент Socket. Решение есть, но я не могу почему-то пользоваться решением Явы, мне парят мозг чем-то готовым, на которое должно ссилаться ссилкой на их сайт. Ка минимум сбор статистики, и уже никакой приватности. Хотя на VB6 я знаю как все делать, нужно только попытаться код в JS попробовать перевести.
...
Рейтинг: 0 / 0
getElementsByClassName vs IE
    #38420844
Zoria
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей159,

вы с таким же успехом можете поместить библиотеку jquery в ваш проект.
...
Рейтинг: 0 / 0
getElementsByClassName vs IE
    #38420945
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей159 "не хочу...до мелочей не знаю", имея ввиду смысл, что этот код никем не проверен чтоб подтвердить что он на 100% не занимается лишним и ненужным, той же статистикой, воровством и т.д.Это называется паранойя. У jQuery открытый код, и если бы в нем была какая-то крамола, это давно бы всплыло и прогремело по всем интернетам. И даже с обфусцированным кодом консоль браузера, которую использует любой более-менее вменяемый разработчик, прилежно отображает все запросы, отправляемые в интернет.

Бред, короче.
...
Рейтинг: 0 / 0
getElementsByClassName vs IE
    #38421106
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей159 "не хочу...до мелочей не знаю", имея ввиду смысл, что этот код никем не проверен чтоб подтвердить что он на 100% не занимается лишним и ненужным, той же статистикой, воровством и т.д.
Дважды бред! Любая версия идет как в упакованном, так и в несжатом виде. Никто не мешает взять несжатую версию, параноидально ее проштудировать, убедиться, что никому нафиг не нужно собирать информацию и статистику с твоего супер-пупер-секретного-мега-сайта, и упаковать (и то, если надо).
...
Рейтинг: 0 / 0
getElementsByClassName vs IE
    #38421272
Zoria
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDVsbruckсупер-пупер-секретного-мега-сайта
а вот иронизировать не стоит, по-моему :)
во-первых, сайты на самом деле разные бывают в том числе и банковские.
во-вторых... на мой взгляд как раз параноей сейчас уж наоборот сильно редко кто заморачивается, а иногда не мешало бы и подумать а "что если".
ПС. так что я автора понимаю, можно дуть на воду, обжегшись на молоке. сама такая :)
...
Рейтинг: 0 / 0
getElementsByClassName vs IE
    #38421909
Фотография asws
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей159,

Ну раз не собираетесь использовать jQuery,
советую сделать универсальную функцию my_getElementsByClassName(),
а заодно приглядеться к requestAnimationFrame().

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
(function() {
var x, g, w=window,d=document, a=['moz','webkit','ms','o'], f='AnimationFrame';

/* Функция window.requestAnimationFrame() */
for( x=0; x<4 && !w.requestAnimationFrame; x+=1) {
	w.requestAnimationFrame = w[a[x]+'Request'+f];
	w.cancelAnimationFrame = w[a[x]+'Cancel'+f] || w[a[x]+'CancelRequest'+f];
}
if (!w.requestAnimationFrame) w.requestAnimationFrame = function(c,e){ return window.setTimeout(c,100/6); };
if (!w.cancelAnimationFrame) w.cancelAnimationFrame = function(n){ window.clearTimeout(n); };

/* my_getElementsByClassName(className [,obj]) */
if(d.querySelectorAll) {
	g = function(c,o){ o=d.getElementById(o)||d; return o.querySelectorAll('.'+c); }
}
if(d.getElementsByClassName) {
	g = g||function(c,o){ o=d.getElementById(o)||d; return o.getElementsByClassName(c); }
}
else {
	g = g||function(c,o){
		var i, j, r=[], m=new RegExp('\\b'+c+'\\b'), o=d.getElementById(o)||d, e=o.getElementsByTagName('*');
		j=e.length; for(i=0;i<j;i+=1) { c=e[i].className; if(m.test(c))r.push(e[i]); }
		return r;
	};
	d.getElementsByClassName=g;
}
my_getElementsByClassName=g;

}());
...
Рейтинг: 0 / 0
getElementsByClassName vs IE
    #38421948
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asws, какая польза от requestAnimationFrame в контексте getElementsByName?
...
Рейтинг: 0 / 0
getElementsByClassName vs IE
    #38421968
Фотография asws
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazileasws, какая польза от requestAnimationFrame в контексте getElementsByName?
Прямой связи никакой нет, мне показалось удобным сразу запостить такой вариант, учитывая, что ТС не использует jQuery
(анимация сейчас практически везде используется).

Не стал вырезать из скопированного шаблона requestAnimationFrame(),
так как думаю сам шаблон унификации под браузеры может иметь компактный гибкий код без портянок.

Там кстати есть и querySelectorAll(), и getElementsByClassName(), и getElementsByTagName(),
и много чего ещё можно встроить довольно гибко, например, аналог .ready() и т.д.
...
Рейтинг: 0 / 0
getElementsByClassName vs IE
    #38422246
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aswsАндрей159,

Ну раз не собираетесь использовать jQuery,
советую сделать универсальную функцию my_getElementsByClassName(),
а заодно приглядеться к requestAnimationFrame().

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
(function() {
var x, g, w=window,d=document, a=['moz','webkit','ms','o'], f='AnimationFrame';

/* Функция window.requestAnimationFrame() */
for( x=0; x<4 && !w.requestAnimationFrame; x+=1) {
	w.requestAnimationFrame = w[a[x]+'Request'+f];
	w.cancelAnimationFrame = w[a[x]+'Cancel'+f] || w[a[x]+'CancelRequest'+f];
}
if (!w.requestAnimationFrame) w.requestAnimationFrame = function(c,e){ return window.setTimeout(c,100/6); };
if (!w.cancelAnimationFrame) w.cancelAnimationFrame = function(n){ window.clearTimeout(n); };

/* my_getElementsByClassName(className [,obj]) */
if(d.querySelectorAll) {
	g = function(c,o){ o=d.getElementById(o)||d; return o.querySelectorAll('.'+c); }
}
if(d.getElementsByClassName) {
	g = g||function(c,o){ o=d.getElementById(o)||d; return o.getElementsByClassName(c); }
}
else {
	g = g||function(c,o){
		var i, j, r=[], m=new RegExp('\\b'+c+'\\b'), o=d.getElementById(o)||d, e=o.getElementsByTagName('*');
		j=e.length; for(i=0;i<j;i+=1) { c=e[i].className; if(m.test(c))r.push(e[i]); }
		return r;
	};
	d.getElementsByClassName=g;
}
my_getElementsByClassName=g;

}());


Спасибо.
...
Рейтинг: 0 / 0
getElementsByClassName vs IE
    #38422250
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я такой код написал
Код: java
1.
2.
3.
4.
	function StartTimer(m,f,o,e,k){
		eval(f);var c=0;
		var i = setInterval(function(){c=c+k;eval(o);if(c>=100){clearInterval(i);eval(e);}},m);
	}


Там нужно передать начальное состояние, шаг цикла, задержка таймера, состояние которое будет меняться в зависимости от коэффициента внутри цикла, и состояние по окончанию задания. Данная функция не уверен что крос.. были проблемы с eval
Код: java
1.
2.
3.
function globalEval(code) {
  window.execScript ? execScript(code) : window.eval(code);
}


В этой анимации есть недочет. Она может использоваться, в случаях появления окон в разный способ и исчезновения. А для меню использовать не получится так как анимация не прерывается когда нужно делать противоположное действие. Завтра с утра попробую ваш вариант. Спасибо
...
Рейтинг: 0 / 0
getElementsByClassName vs IE
    #38422259
Фотография asws
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей159,

requestAnimationFrame() используется для того, чтобы снизить нагрузку на процессор при рендеринге страницы.
Браузер подстраивается и вызывает функцию в тот момент, когда ему удобно рендерить.
Как правило, совпадает или кратно частоте монитора (обычно 60 Гц).

Андрей159...были проблемы с eval...
Код, использующий функцию eval() , сложно отлаживать, есть опасность инъекций и собственных ошибок.
При выполнении eval() контекст вызова такой-же, как будто выполняемый код уже был напрямую встроен в окружающую функцию.
Чтобы предотвратить возможную перезапись (через var ) локальных переменных, оборачивайте вызов eval() в немедленно вызываемую функцию ( function() { eval(...) } () );
или используйте вместо eval() конструктор new Function(myString)(); - ему всегда доступна только глобальная область видимости, независимо от того, где он вызван, поэтому локальные переменные никак не пострадают.

Андрей159...так как анимация не прерывается когда нужно делать противоположное действие...
В моей функции анимации помежуточные позиции хранятся в массивах, поэтому всегда известно текущее положение элемента, даже если анимация остановлена или изменила направление.
Это позволяет в любой момент времени менять анимацию без дёрганий элемента, а так же производить перерисовку в любой необходимый момент.
Здесь как раз requestAnimationFrame() и работает очень прилично, производя перерисовку одновременно всех объектов анимации.

Если вдруг где ошибся, сорри, но вроде всё верно...
...
Рейтинг: 0 / 0
getElementsByClassName vs IE
    #38422260
Фотография asws
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На всякий случай уточню, если непонятно.
Когда происходит отработка requestAnimationFrame() , вызывается наша функция, которая и должна перенести значения из массивов в стили DOM-элементов
Когда выполнять пересчёт значений в массивах, это на усмотрение, здесь можно по-разному, можно одновременно, или в других функциях корректировать если нужно...
...
Рейтинг: 0 / 0
getElementsByClassName vs IE
    #38422435
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, eval и window.eval - не одно и тоже. Последний выполняет код в глобальном scope.
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / getElementsByClassName vs IE
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]