Запомнить исходное состояние до клика.
Есть кнопка (на самом деле их много)
<div class="allDomains minimized">все 45шт</div> на ней висит обработчик события "click": el.onclick = function(){ if(this.className.indexOf("minimized") != -1){ this.firstChild.nodeValue = 'свернуть обратно'; this.className = this.className.replace("minimized", 'expanded'); } else if(this.className.indexOf("expanded") != -1){ this.firstChild.nodeValue = 'то, что было тут до клика'; this.className = this.className.replace("expanded", 'minimized'); } } Обработчик меняет состояние кнопки. Господа, какой есть стандартный-правильный способ запомнить текстовый узел до "первого" клика и вернуть его при втором клике (на ту же кнопку)? Можно ли запоминать этот узел в переменной javascript, а не использовать для хранения информации HTML элементы? |
Как и где "это" хранить?
|
Цитата:
|
Цитата:
<div class="allDomains minimized">все 45шт</div> например |
Цитата:
<div onclick="changeMe(this)"><span id="first">First</span> text</div> <script> var storage function changeMe(div){ var newSpan = document.createElement('span') storage = div.firstChild if(storage.id=='first'){ newSpan.id = 'second' newSpan.innerHTML = 'Second' }else{ newSpan.id = 'first' newSpan.innerHTML = 'First' } div.insertBefore(newSpan, storage) div.removeChild(storage) } </script> UPD: До меня дошло, что тебе нужно:) <div id="allDomains" class="minimized">все 45шт</div> <div id="allSomething" class="minimized">все 139шт</div> <script> var storage = {}, divs = document.getElementsByTagName('div') function toggle(){ if(this.className == 'minimized'){ if(!storage[this.id]) storage[this.id] = this.innerHTML this.innerHTML = 'свернуть обратно' this.className = 'expanded' }else{ this.innerHTML = storage[this.id] this.className = 'minimized' } } for(var i=0; i<divs.length; i++) divs[i].onclick = toggle </script> |
Решение было найдено (коллеги помогли):
el.onclick = function(){ if(this.className.indexOf("minimized") != -1){ this.originalText = this.firstChild.nodeValue; //store original this.firstChild.nodeValue = 'turn back'; //change it this.className = this.className.replace("minimized", 'expanded'); } else if(this.className.indexOf("expanded") != -1){ this.firstChild.nodeValue = this.originalText; //restore it this.className = this.className.replace("expanded", 'minimized'); } } а вот так оно работает: http://jsfiddle.net/nick_craver/KrFuX/ |
Часовой пояс GMT +3, время: 07:05. |