webForumDet fria alternativet

skumt fel..

2 svar · 387 visningar · startad av Fredde Mannen

Fredde MannenMedlem sedan nov. 20014 054 inlägg
#1

Har skapat en mycket enkel visa/dölj för ul, i IE räknar den rätt på antalet li i varje ul, men inte i ff.. blir hel konstigt där..

vad tror ni?! Såga mig nu vid fotknölarna :D

	var eDiv = document.getElementsByTagName('div');	

	function newsList() {
		
		var i;
		try {
		
		for(i=0;i<eDiv.length;i++) {

			if(eDiv[i].className == 'visible') {
				// dölj div-elementen som har className==visible
				eDiv[i].className = 'invisible';
				
				// skapa nytt a-element
				var a = document.createElement('a');

				// räkna antalet noder i ul som ligger i diven med ordningen i.
				var listItems = eDiv[i].getElementsByTagName('ul')[0].childNodes.length;

				// Skapa text för visa/dölj länkarna beroende på antalet nyheter (li-items)
				if(listItems > 1) {
					var txt = document.createTextNode('Visa alla ' + listItems + ' nyheter!');
				} else { 
					var txt = document.createTextNode('Visa nyheten!');
				}
				
				a.setAttribute('href','javascript:expand('+i+','+listItems+');');		
				// Lägg till text till länken.
				a.appendChild(txt);
				// Lägg till den skapade länken sist i föräldertaggen. 
				eDiv[i].appendChild(a);
			}
			
		}	
		
	} catch(e) {
		alert(e.message);	
	}			
	}
	
	function expand(item,listItems) {
		
		try {
			if(item) {
				eDiv[item].className = 'visible';
				eDiv[item].lastChild.href='javascript:collapse('+item+','+listItems+');';
				
				// läs kommentar högre upp..
				if(listItems > 1) {
					var txt = 'D&ouml;lj alla ' + listItems + ' nyheter!';
				} else { 
					var txt = 'D&ouml;lj nyheten!';
				}
				// Sätt text för länk!
				eDiv[item].lastChild.innerHTML = txt;
			}
		} catch(e) {
			alert(e.message);
		}
	}
	
	function collapse(item,listItems) {
	
		try {
			if(item) {
				eDiv[item].className = 'invisible';
				eDiv[item].lastChild.href='javascript:expand('+item+','+listItems+');';
				
				// läs kommentar högre upp..
				if(listItems > 1) {
					var txt = 'Visa alla ' + listItems + ' nyheter!';
				} else { 
					var txt = 'Visa nyheten!';
				}
				// Sätt text för länk!
				eDiv[item].lastChild.innerHTML = txt;
			}
		} catch(e) {
			alert(e.message);
		}
		
	}
	
	// load event
	addLoadEvent(newsList);

IE visar de korrketa antalet:
i IE: 27, 9, 29, 1
och FF visar tok konstigt fel
i FF: 55, 19, 59, 3

det blir en skillnad: 28, 10, 30, 2 på antal li i varje ul i varje div.. :l

MorphMedlem sedan juli 2000534 inlägg
#2

Det är skillnad på vad IE och FF returnerar när man anropar childNodes.length. FF gör som W3C-spec:en säger och inkluderar whitespace (dvs radbrytningar o dyl) som textnoder i nodträdet, vilket inte IE gör. Läs mer på Mozilla.org.

För att lösa problemet kan du ju t.ex. skriva om funktionen så den går igenom .childNodes men bara räknar noder med ett .nodeName som är lika med 'li'.

Fredde MannenMedlem sedan nov. 20014 054 inlägg
#3

Morph skrev:

Det är skillnad på vad IE och FF returnerar när man anropar childNodes.length. FF gör som W3C-spec:en säger och inkluderar whitespace (dvs radbrytningar o dyl) som textnoder i nodträdet, vilket inte IE gör. Läs mer på Mozilla.org.

För att lösa problemet kan du ju t.ex. skriva om funktionen så den går igenom .childNodes men bara räknar noder med ett .nodeName som är lika med 'li'.

Upptäckte det.. :) Tack så mycket!

Får kolla detta med .nodeName, då kanske man får rätt antal i FF också :D hehe..

137 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)