Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #31 (permalink)  
Старый 09.05.2012, 21:22
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сегодня допилил модель 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>
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #32 (permalink)  
Старый 23.05.2012, 20:26
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Обновил модель селекторов, теперь она стала весить чуть ли не в два раза меньше чем весила. Селектор рассчитан только для ИЕ<9 поэтому был оптимизирован только для ИЕ, в других браузерах он не будет инициализирован. Используйте его вместе с моделью element и у вас будет полноценные селекторы в ИЕ6-7-8, подробнее о включениях читайте первый топик.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #33 (permalink)  
Старый 23.05.2012, 23:09
Аватар для GuardCat
Просто любитель
Отправить личное сообщение для GuardCat Посмотреть профиль Найти все сообщения от GuardCat
 
Регистрация: 13.09.2011
Сообщений: 300

devote, блин, спасибо огромное. Для HTA приложений, которые в XP запускаются в ie6 (а в нашей конторе ещё в непропатченном, в некоторых случаях), лучше не придумаешь. Время появится, оттестирую в таких условиях.
Ответить с цитированием
  #34 (permalink)  
Старый 24.05.2012, 00:51
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от devote Посмотреть сообщение
Обновил модель селекторов, теперь она стала весить чуть ли не в два раза меньше чем весила. Селектор рассчитан только для ИЕ<9 поэтому был оптимизирован только для ИЕ, в других браузерах он не будет инициализирован. Используйте его вместе с моделью element и у вас будет полноценные селекторы в ИЕ6-7-8, подробнее о включениях читайте первый топик.
Devote, вы знаете такой способ? для IE. правда, ограничен возможностями CSS-движка.
<!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>
Ответить с цитированием
  #35 (permalink)  
Старый 24.05.2012, 02:12
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

GuardCat, всегда рад помочь)

melky, спасибо! Очень интересное решение, я обязательно его рассмотрю и испробую.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #36 (permalink)  
Старый 24.05.2012, 09:35
Аватар для GuardCat
Просто любитель
Отправить личное сообщение для GuardCat Посмотреть профиль Найти все сообщения от GuardCat
 
Регистрация: 13.09.2011
Сообщений: 300

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">
      Кредитный калькулятор, использующий стандартные формулы для расчётов &copy; <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, 24.05.2012 в 09:44.
Ответить с цитированием
  #37 (permalink)  
Старый 24.05.2012, 09:53
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

GuardCat, сейчас посмотрю в чем причина
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #38 (permalink)  
Старый 24.05.2012, 10:05
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Я исправил ошибку, приношу свои извинения..
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #39 (permalink)  
Старый 24.05.2012, 11:33
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Цитата:
"use strict";
Зачем это в коде, осел не поймет же
__________________
Болтовня ничего не стоит. Покажите мне код. — Linus Torvalds
влад.куркин.рф
Ответить с цитированием
  #40 (permalink)  
Старый 24.05.2012, 11:49
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от B~Vladi Посмотреть сообщение
Зачем это в коде, осел не поймет же
я вообще не понимаю, зачем оно нужно. я и так программирую без тупняков, на которые мне укажет строгий режим выбросом ошибок.

почитав MDN, увидел там ЭТО:
Цитата:
Second, strict mode fixes mistakes that make it difficult for JavaScript engines to perform optimizations: strict mode code can sometimes be made to run faster than identical code that's not strict mode (Firefox 4 generally hasn't optimized strict mode yet, but subsequent versions will).
погуглив сравнения, ничего не нашел. где можно увидеть сравнение скорости?

мои результаты сравнения говорят, что strict mode тормозит выполнение примерно на 1% (стабильно, в чроме, и файрфоксе.). сравнивал на css.js

Последний раз редактировалось melky, 24.05.2012 в 11:59.
Ответить с цитированием
Ответ



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

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