Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / getElementsByClassName vs IE / 24 сообщений из 24, страница 1 из 1
08.10.2013, 16:07
    #38420539
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
getElementsByClassName vs IE
Написал примитивный код
Код: 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
08.10.2013, 16:16
    #38420560
bazile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
getElementsByClassName vs IE
Андрей159, getElementsByClassName поддерживается начиная с ie9 ( caniuse , msdn )
...
Рейтинг: 0 / 0
08.10.2013, 16:27
    #38420584
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
getElementsByClassName vs IE
Спасибо. Так и подозревал.
Думаю то что я нашел должно помочь. 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
08.10.2013, 16:30
    #38420588
user89
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
getElementsByClassName vs IE
Андрей159,

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

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

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

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

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

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

Бред, короче.
...
Рейтинг: 0 / 0
09.10.2013, 09:31
    #38421106
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
getElementsByClassName vs IE
Андрей159 "не хочу...до мелочей не знаю", имея ввиду смысл, что этот код никем не проверен чтоб подтвердить что он на 100% не занимается лишним и ненужным, той же статистикой, воровством и т.д.
Дважды бред! Любая версия идет как в упакованном, так и в несжатом виде. Никто не мешает взять несжатую версию, параноидально ее проштудировать, убедиться, что никому нафиг не нужно собирать информацию и статистику с твоего супер-пупер-секретного-мега-сайта, и упаковать (и то, если надо).
...
Рейтинг: 0 / 0
09.10.2013, 11:32
    #38421272
Zoria
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
getElementsByClassName vs IE
IDVsbruckсупер-пупер-секретного-мега-сайта
а вот иронизировать не стоит, по-моему :)
во-первых, сайты на самом деле разные бывают в том числе и банковские.
во-вторых... на мой взгляд как раз параноей сейчас уж наоборот сильно редко кто заморачивается, а иногда не мешало бы и подумать а "что если".
ПС. так что я автора понимаю, можно дуть на воду, обжегшись на молоке. сама такая :)
...
Рейтинг: 0 / 0
09.10.2013, 17:29
    #38421909
asws
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
getElementsByClassName vs IE
Андрей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
09.10.2013, 17:51
    #38421948
bazile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
getElementsByClassName vs IE
asws, какая польза от requestAnimationFrame в контексте getElementsByName?
...
Рейтинг: 0 / 0
09.10.2013, 18:03
    #38421968
asws
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
getElementsByClassName vs IE
bazileasws, какая польза от requestAnimationFrame в контексте getElementsByName?
Прямой связи никакой нет, мне показалось удобным сразу запостить такой вариант, учитывая, что ТС не использует jQuery
(анимация сейчас практически везде используется).

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

Там кстати есть и querySelectorAll(), и getElementsByClassName(), и getElementsByTagName(),
и много чего ещё можно встроить довольно гибко, например, аналог .ready() и т.д.
...
Рейтинг: 0 / 0
10.10.2013, 01:02
    #38422246
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
getElementsByClassName vs IE
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
10.10.2013, 01:16
    #38422250
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
getElementsByClassName vs IE
я такой код написал
Код: 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
10.10.2013, 01:57
    #38422259
asws
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
getElementsByClassName vs IE
Андрей159,

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

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

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

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


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