Może mi ktoś powiedzieć, dlaczego ten kod nie chce działać w Operze?? Jedyna informacja jaką udało mi się znaleźć na ten temat – aptana.com. Czyżby Opera nie wspierała document.getElementsByName oraz length??
entries = document.getElementsByName("miniblog_content"); for(i=0; i < entries.length; i++) { entries[i].style.display = entries[i].style.display == "block" ? "none" : "block"; }
Problem rozwiązany:
Przejrzałem W3C i znalazłem info:
The getElementsByName() method returns a collection of objects with the specified NAME.
Tak więc wnioskując z opisu, metodę tą można wykorzystać do wszystkich obiektów znajdujących się na stronie, również dla <div>. W swoich przykładach na developer.mozilla.org pokazano przykłady ustawiania parametru name dla znacznika <div>. A co na to Opera? Opera mówi nie! i nie wspiera pobierania za pomocą document.getElementsByName() znaczników innych niż <input>.
Tak więc trzeba sobie poradzić w inny sposób :-/
Można sobie poradzić z getElementsByName na Operze i IE stosując małą sztuczkę 😉
function getElementsByName_fix(tag, name) { var elem = document.getElementsByTagName(tag); var arr = new Array(); for(i = 0,iarr = 0; i < elem.length; i++) { att = elem[i].getAttribute("name"); if(att == name) { arr[iarr] = elem[i]; iarr++; } } return arr; }
A nie lepiej po prostu użyć document.getElementById(); ?
Można by użyć document.getElementById(), ale każdemu elementowi należałoby nadać unikalne id i przemieszczać się po nich poprzez pętlę 😉 Jak dla mnie nadal prostszym rozwiązaniem(nie biorąc pod uwagę Opery :P) jest document.getElementsByName();
Poza tym Id chyba nie przechodzi walidacji na w3c, a name tak.
cos z tym kodem jest nie tak, mimo iz skladnia jest ok, bo nie wykonuje sie poprawnie w operze ani w ff
nie działa? nie możliwe 😛 jakieś błędy z konsoli w ff?