Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #181 (permalink)  
Старый 26.04.2011, 17:40
Аватар для poorking
prodigy
Отправить личное сообщение для poorking Посмотреть профиль Найти все сообщения от poorking
 
Регистрация: 01.11.2010
Сообщений: 503

Задам вопрос здесь, чтобы не плодить темы.

Писал функционал для создания ДОМ узлов, поудобнее страндартного, на его основе. И возвращает он documentFragment, так как есть возможность за раз вернуть несколько элементов в него запакованных. Но нужна была возможность преобразовывать DOM Элемент в хтмл и я сначала сделал так

//корневой элемент, который я буду возвращать
chest = document.createDocumentFragment();
//создаем тут все дерево в зависимости от параметров
//***************

//в конце
chest.html = function(){
 var div = document.createElement("DIV");
 div.appendChild(this);
 return div.innerHTML;

}
return chest;


Но по вставке фрагмента в узел, он исчезает. Вопрос в том, куда девается метод html() ? Удаляется garbage collector -ом?

Пока я этого не понял я еще так попробовал
Object.prototype.html = function(){
	if(!this.nodeType){
		return "";
	}
	
	var div = document.createElement("DIV");
	div.appendChild(this);
	
	return div.innerHTML;
}


Проверил на html элементах, работает нормально. Не стал проверять nodeType == 1 или 3, вдруг коммент захочется создать (8) или еще чего (не знаю зачем, просто интересно). Любую ли nodeType можно appendChild ?
И как как правильнее проверить Object что это XML node? (Жалко что нет прототипа у хтмл элементов в IE)
__________________
readOnly
Ответить с цитированием
  #182 (permalink)  
Старый 26.04.2011, 21:34
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,560

Сообщение от UpJump Посмотреть сообщение
Aetae, для быстрой и одновременно плавной анимации.
Вообще-то человеческий глаз воспринимает 24 кадра в секунду, те интервал менее ~41мс не нужен. На самом деле и 100мс более чем достаточно в большинстве случаев.

Все тормоза в анимации, как подмечено ранее, в её тяжеловесности, во времени собсно обработки, и тут какой интервал не ставь - толку никакого. Надо оптимизировать.)
__________________
29375, 35

Последний раз редактировалось Aetae, 26.04.2011 в 21:38.
Ответить с цитированием
  #183 (permalink)  
Старый 27.04.2011, 14:35
Аватар для UpJump
Профессор
Отправить личное сообщение для UpJump Посмотреть профиль Найти все сообщения от UpJump
 
Регистрация: 02.11.2010
Сообщений: 174

огромное спасибо poorking и Aetae.

теперь понял где загвостку искуть.
Ответить с цитированием
  #184 (permalink)  
Старый 27.04.2011, 22:56
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

poorking, используй строки (String.format, String.compile например). Во-первых, будет понятно, что ты за разметку генерируешь, а во-вторых, скорее всего будет быстрее, чем работа с DOM

по поводу DocumentFragment... метод html никуда не исчезает, просто appendChild(documentFragment) - это appendChild всех его детей. А как мы знаем, appendChild удаляет элементы из контейнера, в котором они до этого были

Сообщение от poorking
Любую ли nodeType можно appendChild ?
попробуй

Сообщение от poorking
И как как правильнее проверить Object что это XML node?
зачем? И что ты с ними делать собираешься?
Ответить с цитированием
  #185 (permalink)  
Старый 26.05.2011, 05:23
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Снова, чтоб не засорять форум, спрашиваю здесь.
Почему первый вариант вызывает ошибку, второй возвращает 4, третий работает корректно (получаем объект, указанный в скобках)?
eval('{a:4, b:6}'); //Unexpected token :
eval('{a:4}'); //4
eval('({a:4, b:6})'); //объект {a:4, b:6}

Проверялось только в хроме.
Ответить с цитированием
  #186 (permalink)  
Старый 26.05.2011, 12:04
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от FINoM
{a:4, b:6}
Здесь фигурные скобки не находятся внутри выражения, поэтому рассматриваются как блок. a: рассматривается как метка, 4 -- выражение. А вот после запятой метки быть не может, поэтому ошибка.

Сообщение от FINoM
второй возвращает 4
Из объяснения выше убираем про ошибку.

Сообщение от FINoM
({a:4, b:6})
Здесь уже фигурные скобки находятся внутри выражения, поэтому рассматриваются как объект.

Для подробностей читать грамматику языка
Ответить с цитированием
  #187 (permalink)  
Старый 05.07.2011, 17:29
Аватар для UpJump
Профессор
Отправить личное сообщение для UpJump Посмотреть профиль Найти все сообщения от UpJump
 
Регистрация: 02.11.2010
Сообщений: 174

Всем привет! Братья прошу помощи.

function f(a){
var a = a*(2*Math.PI/360);
var z = (2*(-Math.sin(a))+2*(Math.cos(a)));
alert(z);
}
f(45);


Почему результат не ноль. Даже не близко. Может кто углядит потому как глаз уже замылился.
Ответить с цитированием
  #188 (permalink)  
Старый 05.07.2011, 17:44
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Сообщение от UpJump
Даже не близко
Почему же. Очень даже близко: 2.220446049250313e-16
Ответить с цитированием
  #189 (permalink)  
Старый 05.07.2011, 18:27
Аватар для UpJump
Профессор
Отправить личное сообщение для UpJump Посмотреть профиль Найти все сообщения от UpJump
 
Регистрация: 02.11.2010
Сообщений: 174

а ну да... понял. если округлить то да.
Math.cell(z);
Ответить с цитированием
  #190 (permalink)  
Старый 09.07.2011, 20:36
Аватар для UpJump
Профессор
Отправить личное сообщение для UpJump Посмотреть профиль Найти все сообщения от UpJump
 
Регистрация: 02.11.2010
Сообщений: 174

Всем привет! Вот такой мелкий скрипт:
<div id = 'd'></div>

<script>

function clear(div_id){
	for(var i =0; i<document.getElementById(div_id).childNodes.length; i++)
			document.getElementById(div_id).removeChild(document.getElementById(div_id).childNodes[i]);
}

function f(){
	clear('d');
	var c = document.createElement('canvas');
	var div = document.getElementById('d');
	div.appendChild(c);
}

window.setInterval(f,1);

</script>

Дело в том что он(скрипт) мало по малу но зжирает память. Никак не могу понять от чего. Есть подозрения что остаются ссылки на удаленные элементы(но опять таки где и как с ними бороться?). Читал про утечки памяти, но либо не дошло, либо не в этом дело. В общем братья может кто знает выход из данной ситуации?

P.S.
Это попытка написать примитивный движок на базе js + canvas если кому интересно. Код упрощен до проблемной зоны.
Тестировал на Chrome и IE.
Ответить с цитированием
Ответ



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

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