![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 1.11.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Mam mały problem. Otóż tworzę takiego sobie diva: Kod var lp_div_kosz = document.createElement('div'); var tx = document.createTextNode(l_p) Page_updater.appendChild(lp_div_kosz, tx); var nazwa_a_kosz = document.createElement('a'); var tx2 = document.createTextNode(nazwa_kosz); Page_updater.appendChild(nazwa_a_kosz, tx2); var cena_div_kosz = document.createElement('div'); var tx3 = document.createTextNode(cena_kosz); Page_updater.appendChild(cena_div_kosz, tx3); var usun_prod_ico = Page_updater.createElement('form', {action:''}); var form_div1 = document.createElement('div'); var usun_but = Page_updater.createNoEndTagElement('input', {type:'button', Class:'remove_ico', value:'', onclick:'javascript:Koszyk.usun(this.parentNode);'}); Page_updater.appendChild(form_div1, usun_but); Page_updater.appendChild(usun_prod_ico, form_div1); var change_quant = Page_updater.createElement('form', {action:'', id:'ch_f_prod'+id_kosz}); var form_div2 = document.createElement('div'); var change_inp = Page_updater.createNoEndTagElement('input', {type:'text', Class:'change_quant', value:ilosc_kosz, onblur:'javascript:Koszyk.zmien_ilosc(this.parentNode, this.value);'}); Page_updater.appendChild(form_div2, change_inp); Page_updater.appendChild(change_quant, form_div2); funkcje Page_updater to troszkę zmodyfikowane wersje funkcji wbudowanych takie jak createElement czy appendChild. Ale nie w tym problem. Tak stworzonego diva dodaję sobie do stronki(xhtml 1.1 lub jeśli IE to 1.0) Następnie jeśli potrzeba to usuwam tego diva a dokładnie jego wnętrzności. I tu powstaje problem. Gdyż stworzona przeze mnie wersja removeChildren która własnie ma usuwać wnętrzności diva zostawiając jego "głowę" wariuje. Kod Page_updater.removeChild = function() { if(this.removeChild.arguments.length = 1) { var argum = document.getElementById(this.removeChild.arguments[0]); for(var i = 0; i < argum.childNodes.length; i++) { if(argum.childNodes.item(i)) { argum.removeChild(argum.childNodes.item(i)); } } return argum; } else { return null; } Wariacja polega na tym że metoda childNodes widzi wszystkie tagi poprawnie poza tagiem <a> który jak sprawdziłęm alertem zamiast <a>cośtamcośtamcośtam</a> wyświetla cośtamcośtamcośtam. W ten sposób nie mam dostępu do tego elementu i nie jest usuwany. Div wygląda tak Czy ma ktoś jakieś pojęcie o co chodzi i czemu tak się dzieje. Bede dźwięczny za pomoc. Pozdrawiam. Ten post edytował dziadoo 8.04.2008, 17:12:51 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Przyjaciele php.pl Postów: 1 595 Pomógł: 282 Dołączył: 24.09.2007 Skąd: Reda, Pomorskie. Ostrzeżenie: (0%) ![]() ![]() |
co to jest ?
<div>1<div> |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 1.11.2007 Ostrzeżenie: (0%) ![]() ![]() |
Już poprawiłem. Literówka. Pisałem to z palca nie kopiowałem ze strony. Ma być
<div>1</div>. Oznacza liczbę porządkową tak gwoli ścisłości Ten post edytował dziadoo 8.04.2008, 17:16:12 |
|
|
![]()
Post
#4
|
|
Grupa: Przyjaciele php.pl Postów: 1 595 Pomógł: 282 Dołączył: 24.09.2007 Skąd: Reda, Pomorskie. Ostrzeżenie: (0%) ![]() ![]() |
chyba tutaj masz problem:
Kod for(var i = 0; i < argum.childNodes.length; i++) { if(argum.childNodes.item(i)) { argum.removeChild(argum.childNodes.item(i)); } } kiedy usuwasz potomków z kolekcji wszystko ci się rozjeżdża... zaczynasz indeksować poza kolekcją i pętla ci się kończy, chociaż nie usunąłeś wszystkich elementów. żeby tego uniknąć, to najprościej jest potomków usuwać od końca, spróbuj tak: Kod var count = argum.childNodes.length; for(var i = count; i > 0; i--) argum.removeChild(argum.childNodes.item(i-1)); powodzenia. Ten post edytował nevt 8.04.2008, 18:14:33 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 1.11.2007 Ostrzeżenie: (0%) ![]() ![]() |
nevt jesteś wielki (tak z przesadą troszkę ale..). Dzięki za pomoc. Zrobiłem tak
Kod Page_updater.removeChild = function() { if(this.removeChild.arguments.length = 1) { var argum = document.getElementById(this.removeChild.arguments[0]); var count = argum.childNodes.length; for(var i = count; i >= 0; i--) { if(argum.childNodes[i]) { argum.removeChild(argum.childNodes[i]); } } return argum; } else { return null; } } i śmiga jak trzeba. Jeszcze raz dzięki. Sprawdziłem pod IE7 i poprawiłem tak żeby tam też śmigało jakby ktoś kiedyś coś takiego potrzebował. Ten post edytował dziadoo 9.04.2008, 01:11:16 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 11:43 |