Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JS] "!=" nie działa poprawnie, a "==" już tak.
Forum PHP.pl > Forum > Po stronie przeglądarki
thrawn1986
  1. var liczba = 0;
  2.  
  3. var lista = new Array()
  4. lista[0] = "Kotek";
  5. lista[1] = "Misio";
  6. lista[2] = "Piesek";

  1. var nick = document.getElementsByTagName("img");
  2.  
  3.  
  4. for (var x=0; x<nick.length; x++)
  5. {
  6. for (var z=0; z<lista.length; z++)
  7. {
  8. if ((nick[x].getAttribute("alt") == lista[z]) && (nick[x].parentNode.parentNode.parentNode.parentNode.id == "discussions"))
  9. {
  10. p.appendChild(nick[x].parentNode.parentNode.parentNode);
  11. liczba++;
  12. }
  13. }
  14. }
  15.  


Powyższy kod działa prawidłowo.
Znajduje avatar i jeśli atrybut ALT zgadza się z którąś z nazw w tablicy "lista", to przenosi cały post do innego diva.
Dzięki temu nie widzę postów od osób których nie lubię. A inne zostają.
Bardziej jednak zależy mi na tym, by widzieć posty tylko od osób które lubię, a wszystkie inne ukryć.
W tym celu zmieniłem:

  1. if ((nick[x].getAttribute("alt") == lista[z]) && (nick[x].parentNode.parentNode.parentNode.parentNode.id == "discussions"))

na
  1. if ((nick[x].getAttribute("alt") != lista[z]) && (nick[x].parentNode.parentNode.parentNode.parentNode.id == "discussions"))


Zupełnie nie rozumiem czemu zamiana "==" na "!=" sprawiła że teraz każdy post jest przenoszony, a nie tak jak chciałem, tylko te które mają inną wartość ALT, niż ta z tablicy "lista".
Tym bardziej że operator "==" działał prawidłowo.
nospor
Odrobina logiki sie klania..... Masz liste i po niej iterujesz. Jesli cos pasuje do aktualnego elementu iteraji, to cos robisz.
Czyli zalozmy ze masz 10 elementow na liscie, dla ulatwienia niech to bedą elementy o kolejnych wartosciach 1,2,3,4,.....10.
Porownujesz do kazdego z elementow wartosc 5. No i wkoncu przy ktorejs tam iteracji wartosc 5 bedzie sie zgadzala, a przez inne iteracje bedzie sie nie zgadzala.

Robisz teraz na odwrot i robisz cos gdy sie nie zgadza. No a przeciez dla wartosci 5 nie zgadza sie az 9 elementow z listy, wiec zawsze choc raz warunek sie spelni i zrobisz co miales zrobic co w praktyce przelozy sie, ze zawsze cos sie nie zgadza. Proste i logiczne smile.gif
SebastianW
I używaj raczej:
!==
===
Zalecane.
thrawn1986
Dzięki smile.gif
Faktycznie tak nakazuje logika.

Przerobiłem skrypt i teraz działa, ale częściowo.

W przypadku na którym testowałem są:
4 posty należące do Kotek
1 post należący do Misio
0 należących do Piesek
5 należących do innych użytkowników.

  1. var lista = new Array()
  2. lista[0] = "Piesek";
  3. lista[1] = "Kotek";
  4. lista[2] = "Misio";
  5.  
  6. //-------------------------
  7.  
  8. var d = document.getElementById("discussions");
  9.  
  10.  
  11. var n = document.createElement("div");
  12. d.insertBefore(n, d.firstChild);
  13. n.style.border = "thin solid white";
  14. n.style.margin = "5px";
  15. n.style.padding = "5px";
  16. n.id = "niesmietnik";
  17.  
  18.  
  19. var p = document.createElement("div");
  20. d.insertBefore(p, d.firstChild);
  21. p.style.border = "thin solid red";
  22. p.style.margin = "5px";
  23. p.style.padding = "5px";
  24. p.id = "smietnik";
  25. //p.style.display = "none";


Skrypt najpierw przerzuca wszystkie posty do elementu który ma być ukryty (p), a następnie te które chce zobaczyć do elementu (n).

  1. var nick = document.getElementsByTagName("img");
  2.  
  3. for (var y=0; y<nick.length; y++)
  4. {
  5. if (nick[y].parentNode.parentNode.parentNode.parentNode.id == "discussions")
  6. {
  7. p.appendChild(nick[y].parentNode.parentNode.parentNode);
  8. }
  9. }
  10.  
  11.  
  12. for (var x=0; x<nick.length; x++)
  13. {
  14. for (var z=0; z<lista.length; z++)
  15. {
  16. if ((nick[x].getAttribute("alt") === lista[z]) && (nick[x].parentNode.parentNode.parentNode.parentNode.parentNode.id == "discussions"))
  17. {
  18. n.appendChild(nick[x].parentNode.parentNode.parentNode);
  19.  
  20. }
  21. }
  22. }


Efekt jest taki:
2 posty należące do Kotek trafiły tam gdzie chciałem. Najpierw do "p", a potem do "n". (poprawnie)
kolejne 2 posty należące do Kotek trafił do elementu "p", ale się nie przeniosły do "n". (niepoprawnie)
1 post należący do Misio trafił tam gdzie chciałem. "p", a potem "n". (poprawnie)

Nie rozumiem czemu tak wybiórczo został potraktowany Kotek.
nospor
raz robisz parentNode 4 razy a raz 5 razy, choc za kazdym razem lecisz po tym samym elemencie a potem znowu sie dziwisz wink.gif

=== oraz !== nie ma tutaj znaczenia
thrawn1986
Cytat(nospor @ 9.11.2013, 18:26:16 ) *
raz robisz parentNode 4 razy a raz 5 razy, choc za kazdym razem lecisz po tym samym elemencie a potem znowu sie dziwisz wink.gif

Dlatego, że pierwsza pętla wrzuca wszystkie elementy do jeszcze jednego diva,
jak chcesz, mogę to zmienić na:
  1. var nick = document.getElementsByTagName("img");
  2.  
  3. for (var y=0; y<nick.length; y++)
  4. {
  5. if (nick[y].parentNode.parentNode.parentNode.parentNode.id === "discussions")
  6. {
  7. p.appendChild(nick[y].parentNode.parentNode.parentNode);
  8. }
  9. }
  10.  
  11.  
  12.  
  13.  
  14. for (var x=0; x<nick.length; x++)
  15. {
  16. for (var z=0; z<lista.length; z++)
  17. {
  18. if ((nick[x].getAttribute("alt") === lista[z]) && (nick[x].parentNode.parentNode.parentNode.parentNode.id === "smietnik"))
  19. {
  20. n.appendChild(nick[x].parentNode.parentNode.parentNode);
  21.  
  22. }
  23. }
  24. }

Są cztery tongue.gif

Cytat(nospor @ 9.11.2013, 18:26:16 ) *
=== oraz !== nie ma tutaj znaczenia

Wiem. Dlatego przerobiłem skrypt.

Tworze dwa nowe divy.
Najpierw wszystko przerzucam do diva o id "smietnik". Skrypt to robi bez problemu. Przenosi wszystko tak jak chciałem.
A potem porównuje te które się pokrywają z tablicą i przerzucam do diva o id "niesmietnik"

Wszystko działa idealnie, tylko że z 5 elementów, przerzuca mi tylko 3 (na innych podstronach również tylko 3 i ani jednego więcej).
Najdziwniejsze jest to, że są cztery identyczne elementy o ALT kotek, a skrypt przenosi z diva "smietnik" tylko dwa.
Na logikę powinno być wszystko albo wcale.
nospor
Sprawdz czy wchodzi ci do IFow. Jak wchodzi do wina przenoszenia, jak nie wchodzi to sprawdz czemu nie wchodzi. To jest proste debugowanie
thrawn1986
  1. var test = "";
  2. var test2 = "";
  3. var test3 = "";
  4. var test4 = "";
  5.  
  6. var nick = document.getElementsByTagName("img");
  7.  
  8. for (var x=0; x<nick.length; x++)
  9. {
  10. test+=nick[x].getAttribute("alt") + " ";
  11.  
  12.  
  13. for (var z=0; z<nick.length; z++)
  14. {
  15. test2+=nick[x].getAttribute("alt") + " ";
  16. if ((nick[x].getAttribute("alt") === lista[z]) && (nick[x].parentNode.parentNode.parentNode.parentNode.id === "smietnik"))
  17. {
  18. test3+=nick[x].getAttribute("alt") + "-" + lista[z] + " ";
  19.  
  20. n.appendChild(nick[x].parentNode.parentNode.parentNode);
  21.  
  22. test4+=nick[x].getAttribute("alt") + "-" + lista[z] + " ";
  23.  
  24. }
  25.  
  26. }
  27.  
  28. }
  29.  
  30. alert("test: " + test);
  31. alert("test2: " + test2);
  32. alert("test3: " + test3);
  33. alert("test4: " + test4);


Wyniki testu:

  1. Pierwszy alert pokazuje 19 pozycji. Tyle właśnie jest pozycji IMG na stronie. Czyli wszystko jest ok.
  2. Drugi alert wypisał poprawnie liczbę powtórzeń dla każdego IMG na stronie. Czyli wszystko ok.
  3. Trzeci test zadziałał dobrze, ale tylko trzy, a nie pieć razy pokazując:
    Cytat
    misio-misio, pies-pies, misio-misio
  4. Czwarty alert mnie totalnie zaskoczył.
    Pomijając, że powinien zadziałać pięć, a nie trzy razy, to wyświetlił komunikat:
    Cytat
    misio-misio, misio-pies, misio-misio

    coś z pętla jest nie tak i nie rozumiem co.


Inną sprawa jest, że gdy zamienie:
  1. (nick[x].getAttribute("alt") === lista[z])


na przykładowe:

  1. (nick[x].getAttribute("alt") === "misio")


Wszystko działa dobrze.
!?
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.