 
			
				09.05.2012, 21:22
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 что-то знаю 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 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>
 
		
	
		
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				23.05.2012, 20:26
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 что-то знаю 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 24.05.2009 
					
					
					
						Сообщений: 5,176
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Обновил модель селекторов, теперь она стала весить чуть ли не в два раза меньше чем весила. Селектор рассчитан только для ИЕ<9 поэтому был оптимизирован только для ИЕ, в других браузерах он не будет инициализирован. Используйте его вместе с моделью element и у вас будет полноценные селекторы в ИЕ6-7-8, подробнее о включениях читайте первый топик. 
		
	
		
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				23.05.2012, 23:09
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Просто любитель 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 13.09.2011 
					
					
					
						Сообщений: 300
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 devote, блин, спасибо огромное. Для HTA приложений, которые в XP запускаются в ie6 (а в нашей конторе ещё в непропатченном, в некоторых случаях), лучше не придумаешь. Время появится, оттестирую в таких условиях. 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				24.05.2012, 00:51
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 sinistral 
				
				
				
				
	
 
 
			 | 
			  | 
			
				
				
					Регистрация: 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>
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				24.05.2012, 02:12
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 что-то знаю 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 24.05.2009 
					
					
					
						Сообщений: 5,176
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 GuardCat, всегда рад помочь) 
 
melky, спасибо! Очень интересное решение, я обязательно его рассмотрю и испробую. 
		
	
		
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				24.05.2012, 09:35
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Просто любитель 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 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">
      Кредитный калькулятор, использующий стандартные формулы для расчётов © <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.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				24.05.2012, 09:53
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 что-то знаю 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 24.05.2009 
					
					
					
						Сообщений: 5,176
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 GuardCat, сейчас посмотрю в чем причина 
		
	
		
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				24.05.2012, 10:05
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 что-то знаю 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 24.05.2009 
					
					
					
						Сообщений: 5,176
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Я исправил ошибку, приношу свои извинения.. 
		
	
		
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				24.05.2012, 11:33
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Модератор Всея Форума 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 14.05.2009 
					
					
					
						Сообщений: 4,021
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Зачем это в коде, осел не поймет же    
		
	
		
		
		
		
		
			
				__________________ 
				Болтовня ничего не стоит. Покажите мне код.  — Linus Torvalds
влад.куркин.рф
			 
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				24.05.2012, 11:49
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 sinistral 
				
				
				
				
	
 
 
			 | 
			  | 
			
				
				
					Регистрация: 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.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 |  
  |