Функция кеширования(трудно :))
Есть страничка, на ней есть элемент-контейнер N с содержимым(картинки), также на страничке присутствуют радиокнопки.
Когда пользователь нажимает на радиокнопку происходит Ajax-запрос и в элемент-контейнер N загружается другое содержимое Решил сделать автокеширование, чтобы лишний раз не гонять запросы на сервер. То есть, когда пользователь нажимает на радиокнопку, содержимое элемента-контейнера N сохраняется в объект в виде NodeList и при повторном нажатии это содержимое становится доступно из этого объекта. Вот сам код: var N = document.getElementById("imgCont"); // это элемент контейнер var obj = {}; // объект, в котором будем сохранять содержимое N var buts = document.getElementById("buttoms"); // контейнер с радиокнопками var dir = "dir1"; // тут хранятся значения value от радиокнопок. По умолчанию dir1 function getNewContent (e) { //..тут описан код отфильтровывающий действия на событие, он не представляет интереса...// saveObjectIMG(dir); // кешируем if (obj[e.target.value]) { N.innerHTML = obj[e.target.value]; // возвратим данные в контейнер } // иначе загрузим AJAXом else { //*тут ajax запрос, он не представляет интереса*// } // В конце изменем название директории та активное dir = e.target.value; } function saveObjectIMG(param) { var result = N.innerHTML; obj[param] = result; return obj[param]; } buts.onclick = getNewContent; // при клике на радиокнопку Исправил, должно работать c InnerHTML |
childNodes - это именно активные childNodes. Делая obj[name] = N.childNodes ты присваиваешь obj[name] лишь ссылку на N.childNodes. Соответственно если N умрёт или умрут его childNodes - obj[name] тоже будет пустым.
Надо в случае сокрытия не удалять ноды, а перемещать их в кеширующий documentFragment. |
Aetae,
спасибо! Долго не мог понять что значит фраза: "живое" представление дочерних элементов в русской версии книжки Флэнагана. |
Подкиньте кто-нибудь примерчик как закешировать живой childNode..
Или на словах объясните Оно меня победило, мучаюсь с 5 утра :), и все никак |
вы пробовали дебажить код с помощью debugger и инструментов разработчика ?
сделайте пример на jsfiddle - там можно делать AJAX запросы. так легче будет разобратсья. |
dmitry111,
сохраняй innerHTML. А если уж так хочешься childNodes то: var cached = Array.prototype.slice.call(element.childNodes, 0); Только тогда для ие придётся свои кастыли делать. |
вопрос нахрена, если картинки?
1 гет аякс запросы кешируются. 2 картинки кешируются. 3 достаточно сохранять параметры запроса+адрес картинки если не гет, чтоб не делать запрос какой уже был |
Цитата:
|
melky,
а сам для чего соль добавлял в гет аякс запросы? тема неоднократно была на форуме, хотя это возможно только в ие, но хотя было и не только в нём. но в случае т.с то что он получает адреса изображений. кеширование легко организать как описано у Стефанова. |
Цитата:
|
Часовой пояс GMT +3, время: 01:26. |