Облегчение себе работы
Вот решил заменить 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, время: 03:15. |