Задам вопрос здесь, чтобы не плодить темы.
Писал функционал для создания ДОМ узлов, поудобнее страндартного, на его основе. И возвращает он 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) |
Цитата:
Все тормоза в анимации, как подмечено ранее, в её тяжеловесности, во времени собсно обработки, и тут какой интервал не ставь - толку никакого. Надо оптимизировать.) |
огромное спасибо poorking и Aetae.
теперь понял где загвостку искуть.:thanks: |
poorking, используй строки (String.format, String.compile например). Во-первых, будет понятно, что ты за разметку генерируешь, а во-вторых, скорее всего будет быстрее, чем работа с DOM
по поводу DocumentFragment... метод html никуда не исчезает, просто appendChild(documentFragment) - это appendChild всех его детей. А как мы знаем, appendChild удаляет элементы из контейнера, в котором они до этого были Цитата:
Цитата:
|
Снова, чтоб не засорять форум, спрашиваю здесь.
Почему первый вариант вызывает ошибку, второй возвращает 4, третий работает корректно (получаем объект, указанный в скобках)? eval('{a:4, b:6}'); //Unexpected token : eval('{a:4}'); //4 eval('({a:4, b:6})'); //объект {a:4, b:6} Проверялось только в хроме. |
Цитата:
Цитата:
Цитата:
Для подробностей читать грамматику языка :) |
Всем привет! Братья прошу помощи.
function f(a){ var a = a*(2*Math.PI/360); var z = (2*(-Math.sin(a))+2*(Math.cos(a))); alert(z); } f(45); Почему результат не ноль. Даже не близко. Может кто углядит потому как глаз уже замылился. |
Цитата:
|
а ну да... понял. если округлить то да.
Math.cell(z); |
Всем привет! Вот такой мелкий скрипт:
<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. |
Часовой пояс GMT +3, время: 16:30. |