Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Запомнить исходное состояние до клика. (https://javascript.ru/forum/events/11945-zapomnit-iskhodnoe-sostoyanie-do-klika.html)

Jurasmi 22.09.2010 16:09

Запомнить исходное состояние до клика.
 
Есть кнопка (на самом деле их много)
<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 элементы?

Jurasmi 22.09.2010 16:24

Как и где "это" хранить?

Sweet 22.09.2010 16:36

Цитата:

Сообщение от Jurasmi
Можно ли запоминать этот узел в переменной javascript, а не использовать для хранения информации HTML элементы?

Нужно:) А можно поподробнее? Покажи как выглядет кнопка

Jurasmi 22.09.2010 16:39

Цитата:

Сообщение от Sweet (Сообщение 71633)
Нужно:) А можно поподробнее? Покажи как выглядет кнопка

<div class="allDomains minimized">все 45шт</div>

например

Sweet 22.09.2010 17:02

Цитата:

Сообщение от Jurasmi
Обработчик меняет состояние кнопки.

А это что значит? Плохо понял, что хочешь, но вот код, посмотри, может поможет:
<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>

Jurasmi 24.09.2010 10:47

Решение было найдено (коллеги помогли):
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.