Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: ie7 - problem - pojawiający się z nikąd text node ze spacją jako nodeValue
Forum PHP.pl > Forum > Po stronie przeglądarki > HTML \ XHTML
dziadoo
Witam,
Bardzo proszę o pomoc, gdyż już od 2 tygodni staram się znaleźć jakieś rozwiązanie mojego problemu. I jak na razie zlasowałem sobie mózg i nic więcej.
Oto opis problemu.

Kombinuję stronkę sklepu internetowego. Działanie sklepu oparte jest na ajxie bez żadnej biblioteki w phpie czy js. Jak dotąd szło dobrze, gdybym nie sprawdził jak wygląda to w ie7.
Mam taki skrypcik dotyczący koszyka, może nie śmiga jeszcze do końca, ale to dlatego że stanąłem w miejscu przez ten problem.
daję w znaczniku php bo jak widzę js nie ma:). Proszę o cierpliwość jestem raczej swieży:)
Kod
Koszyk = {};


Sprawa w FF wygląda tak że koszyk śmiga.
A teraz problem.
Otórz pod ie7 w momencie gdy w koszyku już posiadam produkty mam możliwość ich usuwania.
Problem pojawia się w tej linijce
Kod
this.suma_cena = this.suma_cena - del_node.parentNode.childNodes[2].firstChild.nodeValue;
gdyż z jakiś powodów i nie wiem skąd ie7 dodaje dodatkowego noda - nodeType = 3(text) z wartością pustą a dokładniej spacją gdyż sprawdziłem charCodeAt(0)=32.
Lista produktów w kodzie html czy xhtml wygląda następująco:
  1. ....
  2. ....
  3. <div id="koszyk">
  4. <div id="prod1">
  5. <div>1</div>
  6. <a href="#jakislink">Nazwajakiegos produktu</a>
  7. <div>180.00 zł</div>
  8. <div>1</div>
  9. </div>
  10. <div id="prodid2">
  11. .................
  12. ..............itd
  13. ............itp
  14. </div>

Jeśli chodzi o wstawianie nowych produktów przez moją funkcję koszyka Koszyk.dodaj() to juz sprawdzałem czy nie ma zbędnych spacji pomiędzy
Kod
var lista_kosz = "<div id='kosz_prod_" + id_kosz + "'><div>" + this.l_p_kosz + "</div><a href=#kosz_prodid=" + id_kosz + ">" + nazwa_kosz + "</a><div>" + cena_kosz + "</div><div>" + ilosc_kosz + "</div>" + this.usun_prod_ico + "</div>";
?>
i kombinowałem różne inne mozliwości.
Sytuacja jest taka że w najlepszym podejściu jeśli usuwam produkty po kolei czyli od ostatniego do tego pierwszego na liście to problem sie nie pojawia. Ale nie zawsze. Ale zawsze jest tak że jeśli chce usunąć pierwszy produkt na liście to jest lipton. I zawsze jest tak że wszystkie sie usuną tylko nie pierwszy.
Czyli w 90% pierwszy produkt zostaje gdyż ie7 wywala błąd no i zatrzymuje dalsze działanie skryptu który i tak juz by nie śmigał bo w miejscu gdzie nodem powinien być div z ceną pojawia się nie wiadomo skąd nowy node z wartościa spacji.
Odpalałem skrypt pod firebugiem i nodów jest tyle ile trzeba. odpalałem pod debugerrem pod ie co się zowie IE Web Developer i co śmieszne on też nie widzi w podglądzie kodu tego pustego noda.
Więc ogólnie zgłupiałem.
Tyle na ten temat.
Proszę o pomoc bo przeszukałem cały internet heheheh i jak na razie to znalazłem milion innych bugów i kombinacji, lecz żadna mi nie pomogła.
Pozdrawiam
nevt
nie ma znacznika [ js ] ale jest znacznik [ code ] ...
spróbuj zrobić tak:
Kod
Koszyk.usun = function(del_node)
{
    var rem_elem = del_node.parentNode.id;
    var values = del_node.parentNode.getElementsByTagName('div');
    this.suma_cena = this.suma_cena - values[1].firstChild.nodeValue;
    this.suma_ilosc = this.suma_ilosc - values[2].firstChild.nodeValue;
    document.getElementById("basket").removeChild(document.getElementById(rem_elem));
    Koszyk.pokaz_zawartosc();
    Koszyk.pokaz_link();
}

w ten sposób powinieneś odfiltrować "nody widma"

gdyby jednak okazało się, że to values[...].firstChild też zwraca "noda widmo" to zmień jeszcze te dwie linijki:
Kod
    this.suma_cena = this.suma_cena - parseFloat(values[1].innerHTML);
    this.suma_ilosc = this.suma_ilosc - parseInt(values[2].innerHTML);
dziadoo
Już poprawiłęm na code..
Dzięki za pomoc. Tak prosty sposób ale nie wpadłem na to... choć jest to troszkę obejście tematu.. gdyż wcześniej też miałem ten problem ale przerobiłem funkcyjkę i problem zniknął.
Więc nasuwa mi się pytanie czy jest jakiś inny sposób żeby ominąć te "nody widma". Tzn jak sobie z nimi radzić gdy nie da się w łatwy sposób ich obejść.
Czy winą może być innerHTML, gdyż czytałem gdzieś że nie do końca jest on zgodny ze standardem DOM? Czy może każda z funkcji dotycząca DOM może generować takie widma nody?? Pozdrawiam
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.