Облегчение себе работы
Вот решил заменить document.getElementById(x) на byid(x),document.getElementById(x).value на valid(x), document.getElementById(x).innerHTML на htmlid(x) и т.д. Это сильно повлияет на работу скрипта? Такое можно делать или это очень плохо? Только не надо давать ссылки на готовые решения, я и сам знаю как это сделать) Хочется самому)
|
Навряд ли это сильно повлияет на работу скрипта. Другие библиотеки так делают и ничего, вроде все живы))))
|
Цитата:
|
Kolyaj,
Это как? т.е. $id? |
Цитата:
$(id) |
Функцию называют $.
$(id). А ещё лучше, когда $ может принимать id или сам элемент, тогда нивелируется разница между элементом и его id. function $(el, doc) { doc = doc || document; return typeof el == 'string' ? doc.getElementById(el) : el; } |
Спасибо
|
Цитата:
function $( id ){ return new MyFramework(id); } function MyFramework( id ){ this._el = typeof id == 'stirng' ? document.getElementById(id) : id; } MyFramework.prototype.val = function(){ return this._el.value; } |
Цитата:
https://github.com/Kolyaj/CrossJS/bl...rce/dom.js#L93 |
опять же, непривычно. И не обязательно делать именно так как в jquery, можно сделать отдельную обертку для группы элементов, как в mootools
|
Неудобно, но обёртка ещё хуже тем, что надо помнить, какие методы нативные, а какие кастомные. Или же реализовывать кастомный алиас для каждого нативного метода. Все три способа хреновые, я выбрал для себя меньшее из зол.
Лучший вариант -- расширение прототипа -- недоступен в IE. |
Цитата:
|
В прямом. У 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-ю очень хорошо расширили (только что проверил там есть поддержка!) |
var newOffset= getElementOffset('#xxx') + 10
setElementOffset( '#xxx', new Offset ) -- vs -- var el= $('#xxx') var newOffset= el.offset() + 10 el.offset( newOffset ) === не задалбывает каждой функции передавать элемент первым параметром? |
monolithed, а для ие7- можно задать одноразовый экспрешн, который добавит нужные методы при добавлении элемента в дом.
|
Цитата:
|
Цитата:
Цитата:
http://blogs.msdn.com/b/ie/archive/2...-download.aspx по-моему они решили запомниться этими рыбками. И, кстати, быстро у них появилось preview следующей версии Цитата:
Цитата:
|
Цитата:
Проблема: добавить методы для работы с DOM-элементами. Хорошее решение: расширение прототипа. Не будь IE, проблем бы не было. Есть три удовлетворительных решения: 1. Обёртка (jQuery, ExtJS). 2. Добавление методов прямо в DOM-элементы (PrototypeJS, раньше по крайней мере). 3. Обычные функции, принимающие первым аргументом DOM-элемент. Я для себя выбрал третий вариант. Цитата:
|
Цитата:
|
Цитата:
это не все http://ie.microsoft.com/testdrive/Vi...p/Default.html |
Цитата:
|
что-то типа
var ss= document.createStylesheet() ss.cssText= '*{zoom:expression(runtimeStyle.zoom=1,mixin(this, HTMLElement.prototype))}' document.getElementsByTagName('head')[0].appendChild( ss ) вместо zoom лучше использовать что-то более редкое |
Цитата:
|
Правильно.
|
Часовой пояс GMT +3, время: 00:42. |