Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.02.2009, 17:04
Аспирант
Отправить личное сообщение для alekciy Посмотреть профиль Найти все сообщения от alekciy
 
Регистрация: 27.12.2008
Сообщений: 31

Добавить свой метод к элементу
Я наверное туплю, но сейчас не могу сообразить, каким же образом можно создать свой метод элементу?

К примеру, есть такой метод как getElementByTagName, как можно создать метод который будет вызываться таким же образом? Понятное дело, что можно создать функцию и передать элемент для обработки в неё как аргумент этой функции, т.е. так func(node, arg1, arg2 ..... argN). Но каким образом можно реализовать такой вызов node.func(arg1, arg2 ..... argN)? Через protype? Но к какому объекту его нужно зацепить, что бы метод существовал для всех элементов DOM дерева?
Ответить с цитированием
  #2 (permalink)  
Старый 16.02.2009, 17:14
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

В ИЕ никак, поэтому если нужна кроссбраузерность, то можно не париться. Иначе HTMLElement.
Ответить с цитированием
  #3 (permalink)  
Старый 16.02.2009, 17:15
Гость
 
Сообщений: n/a

В IE6,7 у встроенного объекта Element нет prototype, поэтому такая запись:
Element.prototype.method = function() {
    ...
};

работать в нем не будет и никаких других вариантов так добавить пользовательский метод для всех DOM-элементов нет.
Ответить с цитированием
  #4 (permalink)  
Старый 16.02.2009, 18:34
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

есть идея не до конца оформленная:
можно сделать набор методов, прилепить их к document, и сделать, чтоб все объекты возвращаемые нашими методами также имели их у себя
//функции применимые к нодам
function _getElemetById(id)//перегрузка стандартного метода
	{
	var dom_obj=this.getElemetById(id);
	set_new_methods.call(dom_obj);//вызываем, чтоб возвращался объект с нашими новыми методами
	return dom_obj;
	}
function _getElemetsByClass(searchClass,tag)//уникальный метод
	{
	node=this;
	var classElements = new Array();
	    if ( node == null )
	        node = document;
	    if ( tag == null )
	        tag = '*';
	    var els = node.getElementsByTagName(tag);
	    var elsLen = els.length;
	    var pattern = new RegExp('(^|\\\\s)'+searchClass+'(\\\\s|$)');
	    for (i = 0, j = 0; i < elsLen; i++) {
	        if ( pattern.test(els[i].className) ) {
	            classElements[j] = els[i];
				set_new_methods.call(classElements[j]);//вызываем, чтоб возвращался объект с нашими новыми методами
	            j++;
	        }
	    }
	return classElements;
	}
//установка методов для ноды
function set_new_methods()
	{
	this._getElemetById=_getElemetById;
	this._getElemetsByClass=_getElemetsByClass;
	}

set_new_methods.call(document);


document._getElemetById(id)._getElemetsByClass(searchClass,tag);//допустимый вызов

PS код на ошибки не выверялся.полет мысли так сказать
Ответить с цитированием
  #5 (permalink)  
Старый 16.02.2009, 18:37
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Gvozd,
еще немного и Prototype получится
Ответить с цитированием
  #6 (permalink)  
Старый 16.02.2009, 18:52
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

возможно.
я особо его искодники не копал
писал примерно как чукчи поют.что думаю, то и пишу)))
а вообще, если пишеш сам и для себя, то менее громоздким будет формировать ф-ции как Эта
то есть, чтобы один из параметров был нодой.
тогда весь излишний код не надо писать, и пишеш только по сути.
минус:нельзя юзать конструкции последовательного вызова, как в последней строчке кода выше.
но это скорее дело привычки.
в принципе излишнего кода не настолько много формируется.
в конечном итоге надо знать для себя:что надо, как удобней, и чем можно пожертововать ражи удобства.
Ответить с цитированием
  #7 (permalink)  
Старый 16.02.2009, 19:29
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

В Prototype, как раз, функции описаны, как принимающие нод в качестве параметра, а потом биндятся к элементам.

Вообще, в плане изучения кода хороший фреймворк.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
1. Календарь 2. объект String метод getEMail Мандариновая Общие вопросы Javascript 8 31.10.2008 11:33
Как добавить свой блог в раздел feeds этого сайта IzumeRoot Ваши сайты и скрипты 13 30.10.2008 21:11
Добавить контент к последнему элементу Viper jQuery 0 11.10.2008 20:04