Postanowiłem dynamicznie potworzyć sobie content strony za pomocą DOM. Wszystko ładnie zadziałało i nawet się przekonałem do takiego sposobu dodawanie lub usuwania elementów. Problem pojawił się przy usuwaniu konkretnych wierszy tabeli. Firefox, Opera kasowały, IE nie...
Problem analizował długo wrzucając alert() gdzie się da ;). Wynik poszukiwań: winną okazała się funkcja getElementsByName(name); . Wartość length wiązki elementów do której wrzuciłem wynik metody w ffoxie pokazywał np. 3 (co odpowiadało prawdzie) a w IE:0.
Po przeszukaniu sieci potwierdziły się moje obawy. Najpierw wyczytałem że getElementsByName w IE nie zwraca poprawnie wiązki w blokach DVI, SPAN i TR, lecz okazało się to nieprawdą. Metoda ta nie działa kiedy dynamicznie utworzymy elementy strony właśnie poprzez DOM.
Szybko jednak można to obejść. Posłuży do tego metoda getElementsByTagName(name). Pobrałem wszystkie TRki do wiązki, przeszukałem je pętlą i pousuwałem te, których nazwy szukałem.
- wiersze = document.getElementsByTagName("TR");
- var i=0;
- while(i< wiersze.length){
- if(wiersze[i].getAttribute("name")==szukanaFraza){
- objPar = wiersze[i].parentNode;
- objPar.deleteRow(wiersze[i].rowIndex);
- i=0;
- continue;
- }
- i++;
- }
Potem przeszukałem jeszcze raz Internet pod tym kątem i oto co znalazłem (przyda się nieraz!):
http://www.dreamincode.net/code/snippet293.htm
- function getElementsByName_iefix(tag, name) {
- var elem = document.getElementsByTagName(tag);
- var arr = new Array();
- for(i = 0,iarr = 0; i < style="color: rgb(0, 102, 0);">length; i++) {
- att = elem[i].getAttribute("name");
- if(att == name) {
- arr[iarr] = elem[i];
- iarr++;
- }
- }
- return arr;
- }
No i jeszcze na dodatek na stronie MSDN czytamy że getElementsByName sczytuje zarówno elementy o podanym name jak i id :/ to już troszkę przykre.
Pomógł Maryn.
4 komentarze:
Ten problem przewija się przez wszystkie wersje IE, czy tylko na jakiejś konkretnej?
Problem ten - hmm - może nie problem, lecz takie założenie developerów Microsoft występuje w jądrze silnika przeglądarki. Jest to opisane w MSDN Library, czyli jeszcze raz powtórzę, nie problem ale tak już jest...we wszystkich IE.
52 year old Mechanical Systems Engineer Kleon Dilger, hailing from Cumberland enjoys watching movies like Princess and the Pony and Gambling. Took a trip to Primeval Beech Forests of the Carpathians and drives a Ferrari 250 SWB Berlinetta Competizione. zawartosc witryny
adwokaci rzeszow ceny
Prześlij komentarz