Показать сообщение отдельно
  #11 (permalink)  
Старый 09.08.2010, 17:51
DMH DMH вне форума
Аспирант
Отправить личное сообщение для DMH Посмотреть профиль Найти все сообщения от DMH
 
Регистрация: 26.02.2010
Сообщений: 71

Перечисление всего js-dom - много кода. Пока в раздумьях.
Разбил на три группы - события, стили и методы. С первыми двумя проблем нет, с третим (mtd) пока разбираю варианты.

Примерно так -
onmouseover=function() {};
innerHTML='text';
эти похожи, их в первую группу.

style.background='red';
у этого добавился style, его во вторую группу.

С третей группой неопределённость.
setAttribute();
getAttribute();
width+10px;
В этой группе значения как считываются, так и присваиваются.
В итоге для этой группы код получается вроде такого -

z('.be').mtd(offsetWidth+'px');


Основной код -
z=function(x) {

	if (!x) return;

	var a = [];
	var r;

	a.chd = function(x) {for (var i = 0; i < this.length; i++) {return z(x, this[i]);}}
	
	a.stl = function(x) {for (var i = 0; i < this.length; i++) {for (var j in x) this[i].style[j] = x[j];}}

	a.evt = function(x) {for (var i = 0; i < this.length; i++) {for (var j in x) this[i][j] = x[j];}}

	a.mtd = function(x) {for (var i = 0; i < this.length; i++) {return this[i].x;}}



	a.opc = function(b,f,sp) {

		for (var i = 0; i < this.length; i++) {
			var t=this[i];
			if (ie) t.style.filter='alpha(opacity='+(b*100)+')';
			else t.style.opacity=b;

			if ((b==0) && (f>0)) t.style.display='block';
			if ((b==0) && (f==0)) {

				if (t.className=='bu') t.style.top='-1000px';
				else t.style.display='none';
			}

			if (b!=f) {
			
				if (b>f) { b=(b*10-1)/10; setTimeout(function() { z(t).opc(b,f,sp); },sp); }
				else { b=(b*10+1)/10; setTimeout(function() { z(t).opc(b,f,sp); },sp); }
			}

		}
	}


	var e=z.arguments[1];

	if (typeof(x) == 'string') {
		
		x=x.toLowerCase();
		
		if (x.substr(0,1)=='#') {
			var d=document.getElementById(x.slice(1));
			if (d) a.push(d);
			return a;
		}

	if (x.substr(0,1)=='.') r = new RegExp('\\b' + x.slice(1) + '\\b');
	}
	else {

	a.push(x)
	return a;
	}

	e = (e ? e : document).getElementsByTagName("*");

	for (var i = 0; i < e.length; i++) {

	if (r) {if (r.test(e[i].className.toLowerCase())) a.push(e[i]);}
	else {if (e[i].tagName.toLowerCase()==x) a.push(e[i]);}
	}

	return a;
}

chd - дочерние элементы, stl - стили, evt - события и всё что подходит по синтаксису, mtd - всё остальное, opc - одна из моих функций. # - id, .-класс, пустота - сам тег.

Вызов выгдядит так -
z('.t').chd('.bk').stl({background:'url('+btn[l]+') no-repeat'});
// дочерним элементам с классом bk элемента с классом t назначаем фон. 
z('.t').chd('.bk').evt({
onmouseover:function {
alert('over');
},
onmouseout=function() {alert('out')}
});
//тоже самое, только обработчики событий.

Если третий mtd удастся пристроить, тогда всё ок.

Последний раз редактировалось DMH, 10.08.2010 в 03:58.
Ответить с цитированием