Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Облегчение себе работы (https://javascript.ru/forum/misc/16657-oblegchenie-sebe-raboty.html)

Kolyaj 17.04.2011 15:29

Неудобно, но обёртка ещё хуже тем, что надо помнить, какие методы нативные, а какие кастомные. Или же реализовывать кастомный алиас для каждого нативного метода. Все три способа хреновые, я выбрал для себя меньшее из зол.

Лучший вариант -- расширение прототипа -- недоступен в IE.

monolithed 17.04.2011 15:56

Цитата:

Сообщение от Kolyaj
недоступен в IE

в каком смысле?

Kolyaj 17.04.2011 16:16

В прямом. У DOM элементов в IE нет прототипов.

monolithed 17.04.2011 16:47

Цитата:

Сообщение от Kolyaj
В прямом. У DOM элементов в IE нет прототипов.

хм. невнимательно прочитал :)
Однако в IE8 можно уже и так:

//Element.getElementsByClassName IE8+
function getElementsByClass(getClass){
	if(document.querySelectorAll) {
		return document.querySelectorAll("." + getClass);
	}
	else if(document.getElementsByClassName) {
		return document.getElementsByClassName(getClass);
	}
	else {
		var list = document.getElementsByTagName('*'), i = list.length,
		classArray = getClass.split(/\s+/), result = [];
		while(i--) {
			if(list[i].className.search('\\b' + classArray + '\\b') != -1) {
				result.push(list[i]);
			}
		}
		return result;
	}
};
HTMLDocument.prototype.getElementsByClassName = Element.prototype.getElementsByClassName = getElementsByClass;

оффтоп
вообще интересно что Node.ELEMENT_NODE/Node.TEXT_NODE в IE9 по прежнему не определяются, зато 10-ю очень хорошо расширили (только что проверил там есть поддержка!)

tenshi 17.04.2011 17:28

var newOffset= getElementOffset('#xxx') + 10
setElementOffset( '#xxx', new Offset )

-- vs --

var el= $('#xxx')
var newOffset= el.offset() + 10
el.offset( newOffset )

===

не задалбывает каждой функции передавать элемент первым параметром?

tenshi 17.04.2011 17:30

monolithed, а для ие7- можно задать одноразовый экспрешн, который добавит нужные методы при добавлении элемента в дом.

Kolyaj 17.04.2011 17:58

Цитата:

Сообщение от tenshi
не задалбывает каждой функции передавать элемент первым параметром?

Не задалбывает перед каждой функцией писать имя переменной с точкой?

x-yuri 17.04.2011 19:18

Цитата:

Сообщение от Kolyaj
Неудобно

хорошо, почему?

Цитата:

Сообщение от Kolyaj
но обёртка ещё хуже тем, что надо помнить, какие методы нативные, а какие кастомные. Или же реализовывать кастомный алиас для каждого нативного метода. Все три способа хреновые, я выбрал для себя меньшее из зол.

Лучший вариант -- расширение прототипа -- недоступен в IE.

теоретически мне кажется лучшим вариант с оберткой с алиасами. А какой третий вариант? Первый - получать ссылку на элемент и вызывать нативный метод, второй - делать алисы в обертке

http://blogs.msdn.com/b/ie/archive/2...-download.aspx
по-моему они решили запомниться этими рыбками. И, кстати, быстро у них появилось preview следующей версии

Цитата:

Сообщение от tenshi
monolithed, а для ие7- можно задать одноразовый экспрешн, который добавит нужные методы при добавлении элемента в дом.

а можешь кодом продемонстрировать?

Цитата:

Сообщение от Kolyaj
Не задалбывает перед каждой функцией писать имя переменной с точкой?

мне кажется, твой вариант - это жертва ради производительности, к которой ты привык

Kolyaj 17.04.2011 20:36

Цитата:

Сообщение от x-yuri
хорошо, почему?

Это я про своё решение, если что :)

Проблема: добавить методы для работы с DOM-элементами.

Хорошее решение: расширение прототипа. Не будь IE, проблем бы не было.

Есть три удовлетворительных решения:
1. Обёртка (jQuery, ExtJS).
2. Добавление методов прямо в DOM-элементы (PrototypeJS, раньше по крайней мере).
3. Обычные функции, принимающие первым аргументом DOM-элемент.

Я для себя выбрал третий вариант.

Цитата:

Сообщение от x-yuri
мне кажется, твой вариант - это жертва ради производительности, к которой ты привык

Производительность во всех случаях одинаковая, а вот сжимаемость увеличивается. Но больше меня коробит требование предобработки DOM-элементов, чтобы обёртку создать.

x-yuri 17.04.2011 21:05

Цитата:

Сообщение от Kolyaj
Но больше меня коробит требование предобработки DOM-элементов, чтобы обёртку создать.

а что за предобработка?


Часовой пояс GMT +3, время: 22:53.