Запомнить исходное состояние до клика.
Есть кнопка (на самом деле их много)
<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, время: 09:15. |