Сегодня допилил модель Element
Возможности модели максимально приведены в нормальное состояние, возможность добавления методов полностью реализована без ограничений. Модель инициализируется даже до полной загрузки DOM модели, то-есть обращаться к прототипам элементов вы можете не дожидаясь полной загрузки страницы. небольшой пример, который вы можете запустить в ИЕ 7 и ниже: <html> <head> <script type="text/javascript" src="https://raw.github.com/devote/spike/master/models/element.js"></script> </head> <body> <i></i> <script type="text/javascript"> var div1 = document.createElement( 'div' ); div1.className = "elem_div1"; Element.prototype.test1 = function() { alert( 'это функция "test1" на элементе: ' + this.nodeName + "." + this.className ); } div1.test1(); // нужно добавить элемент в DOM что бы было отслеживание // свойства innerHTML, к сожалению отследить изменение // этого свойства можно лишь тогда когда элемент находится // в DOM модели документа, но я считаю это не большим минусом // так как уважающий себя программист данным свойством // пользуется очень редко, ну или для других целей. document.body.appendChild( div1 ); div1.innerHTML = '<b class="elem_B"></b>'; div1.firstChild.test1(); var div2 = document.createElement( 'div' ); Element.prototype.test2 = function() { alert( 'это функция "test2" на элементе: ' + this.nodeName + "." + this.className ); } alert( [ !!div1.test1, !!div1.test2 ] ); // true,true alert( [ !!div2.test1, !!div2.test2 ] ); // true,true // ищем элемент I в DOM var i = document.getElementsByTagName( 'i' )[0]; // проверяем у него присутствие наших новых методов alert( [ !!i.test1, !!i.test2 ] ); // true,true </script> </body> </html> |
Обновил модель селекторов, теперь она стала весить чуть ли не в два раза меньше чем весила. Селектор рассчитан только для ИЕ<9 поэтому был оптимизирован только для ИЕ, в других браузерах он не будет инициализирован. Используйте его вместе с моделью element и у вас будет полноценные селекторы в ИЕ6-7-8, подробнее о включениях читайте первый топик.
|
devote, блин, спасибо огромное. Для HTA приложений, которые в XP запускаются в ie6 (а в нашей конторе ещё в непропатченном, в некоторых случаях), лучше не придумаешь. Время появится, оттестирую в таких условиях.
|
Цитата:
<!DOCTYPE HTML> <div>div.</div> <div>div.</div> <div>div.</div> <div>div.</div> <script> var stylesheet = document.createStyleSheet(), all = document.all; function find(selector) { stylesheet.addRule(selector, "a:b", 0); for(var i = 0, result = []; i in all; i += 1) { *!* if (all[i].currentStyle.a === "b") { // магия :) */!* result.push(all[i]); } } stylesheet.removeRule(0); return result; } (function(){ var els = find("div"); for(i = 0; i in els; i += 1) els[i].style.border = (i+1)+"px green dashed"; })(); </script> |
GuardCat, всегда рад помочь)
melky, спасибо! Очень интересное решение, я обязательно его рассмотрю и испробую. |
devote, первые тесты показывают, что как-то неожиданно работает getElementsByClass. По заданному имени класса, до подключения библиотеки находит 3 элемента (как и есть), а с подключением — уже 39.
Пропатченый IE6. Запрос выглядит так: document.getElementsByClassName( "needCheck" ); Разметка такая: <HTA:APPLICATION APPLICATIONNAME="Simple credit calc" ID="sc" VERSION="1.6.0.1" BORDER="thick" INNERBORDER="no" ICON="calculator.ico" CONTEXTMENU="no"/> <head> <meta charset = "utf-8"> <title>Удобный кредитный калькулятор</title> <link rel = "stylesheet" href = "styles.css" type = "text/css"></link> </head> <body> <div class = 'header'>Simple credit calc: простой расчёт кредита</div> <sub class = "comment">Честно, наглядно, просто.</sub> <form name = "calc" class = "calc"> <label> <input name = "sum" placeholder = "столько" type = "text" class = "needCheck"></abbr> нужная сумма </label> <label> <input name = "term" placeholder = "на столько" type = "text" class = "needCheck"> срок в месяцах (можно ввести так: «2 года 5 мес.» или «5 лет») </label> <label> <input name = "rate" placeholder = "за столько % в год" type = "text" class = "needCheck"> годовая процентная ставка (не ПСК и не переплата) </label> <label> <input name = "firstPayment" placeholder = "столько внесу" type = "text" class = "txt" title = "Необязательное поле"> размер первоначального взноса (добавьте «%», если в процентах) </label> <h3>Тип платежей</h3> <label> <input type = "radio" name = "paymentType" value = "annuitet" checked></input> Все одинаковые (аннуитетные) </label> <label> <input type = "radio" name = "paymentType" value = "differ" ></input> Уменьшающиеся каждый месяц (дифференцированные) </label> <nobr><input id = "go" type = "button" value = " Расчёт"><img src = 'print.png' onclick = 'print();' alt = "Печать расчётов"></nobr> </form> <div id = "report"></div> <div class = "footer"> <hr noshade size = "2px"> Кредитный калькулятор, использующий стандартные формулы для расчётов © <a title = "Посмотреть профиль автора на одном из форумов" href = "http://javascript.ru/forum/members/15847-guardcat/">Guardcat</a> 2012 </div> <script src = "spike.js"> </script> <script src = "newCredit.js"> </script> <script src = "main.js"> </script> <script src = "operator.js"> </script> </body> </html> |
GuardCat, сейчас посмотрю в чем причина
|
Я исправил ошибку, приношу свои извинения..
|
Цитата:
|
Цитата:
почитав MDN, увидел там ЭТО: Цитата:
мои результаты сравнения говорят, что strict mode тормозит выполнение примерно на 1% (стабильно, в чроме, и файрфоксе.). сравнивал на css.js |
Часовой пояс GMT +3, время: 10:32. |