Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JavaScript] zastępowanie wgranego wcześniej zdjęcia nowym
followc
post
Post #1





Grupa: Zarejestrowani
Postów: 179
Pomógł: 0
Dołączył: 30.12.2013
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


Witam,
jako że moja wiedza odnośnie javascriptu ogranicza sie praktycznie tylko do jQuery, a korzystam z gotowego kodu i próbuję go nieco zedytować, błądzę dość poważnie i potrzebuję Waszej pomocy. Otóż poniższa funkcja ajaxowo wyświetla wgrane wcześniej zdjęciA. Chciałbym, żeby ograniczało się to do jednego i zastępowało wcześniej wgrane nowym.
  1. function showUploadedItem (source) {
  2. var list = document.getElementById("image-list"),
  3. li = document.createElement("li"),
  4. img = document.createElement("img");
  5. img.src = source;
  6. li.appendChild(img);
  7. list.appendChild(li);
  8. }


Moje próby typu
  1. function showUploadedItem (source) {
  2. var list = document.getElementById("image-list"),
  3. li = document.getElementById("image-list-li"),
  4.  
  5. img = document.createElement("img");
  6. img.src = source;
  7. li.appendChild(img);
  8. list.appendChild(li);
  9. }


Kończą się jednakowo żałośnie, więc proszę o jakieś wskazówki
Go to the top of the page
+Quote Post
Comandeer
post
Post #2





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

Ostrzeżenie: (0%)
-----


li polecałbym tworzyć (tak, jak w pierwszym kodzie), natomiast nie ma sensu dowalać go na koniec listy (list.appendChild), tylko zastąpić istniejący element listy nowym (replaceChild). Coś typu:
Kod
var oldLi = list.firstElementChild; //jak musisz wspierać IE < 9, to można zrobić list.getElementsByTagName('li')[0]
var newLi = document.createElement('li');
list.replaceChild(newLi, oldLi);


--------------------
Go to the top of the page
+Quote Post
followc
post
Post #3





Grupa: Zarejestrowani
Postów: 179
Pomógł: 0
Dołączył: 30.12.2013
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


Dzięki, ale to nie jest tak że aby to co zaprezentowałeś działało dobrze musiałby już być utworzony pierwszy element, a w przypadku gdy zaczynamy od zera nam się to nie uda? Może źle się wyraziłem, ale chodzi mi o to, że na początku nie mamy nic, wgrywamy zdjęcie (do tego momentu działa tak jak sobie wymarzyłem), ale kolejne są dodawane, nie zastępowane. I gdyby nie ten szczegół Twój kod byłby git. Tak mi się wydaję, racja?
Go to the top of the page
+Quote Post
Comandeer
post
Post #4





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

Ostrzeżenie: (0%)
-----


Racja, ale to wystarczy sprawdzić długość "tablicy" zwróconej przez list.getElementsByTagName('li') i jeśli wynosi 0, to dodać element przez appendChild, a jeśli więcej niż 0, to zastosować zastępowanie.

Można też po prostu od razu stworzyć listę z jednym, pustym elementem wink.gif


--------------------
Go to the top of the page
+Quote Post
followc
post
Post #5





Grupa: Zarejestrowani
Postów: 179
Pomógł: 0
Dołączył: 30.12.2013
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


Niestety moje niezrozumienie JS jest zbyt duże, powstają więc takie twory...
  1. function showUploadedItem (source) {
  2. var list = document.getElementById("image-list"),
  3. //li = document.createElement("li"),
  4. img = document.createElement("img");
  5. img.src = source;
  6.  
  7. if(list.getElementsByTagName('li') == 0){
  8. li = document.createElement("li"),
  9. li.appendChild(img);
  10. list.appendChild(li);
  11. }else{
  12. var oldLi = list.firstElementChild; //jak musisz wspierać IE < 9, to można zrobić list.getElementsByTagName('li')[0]
  13. var newLi = document.createElement('li');
  14. li.appendChild(img);
  15. list.replaceChild(newLi, oldLi);
  16. }
  17. }


Które niewiele zmieniają...

edit. w sumie to problem jest z ifem, bo jesli zrobie if(1) to wykonuje sie tak jak trzeba (nie wiem jak z else)
edit2.
  1. var x = list.getElementsByTagName('li');
  2. if(x.length == 0){

miało większe szanse powodzenia;)

Ten post edytował followc 5.09.2015, 16:28:47
Go to the top of the page
+Quote Post
Comandeer
post
Post #6





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

Ostrzeżenie: (0%)
-----


http://jsfiddle.net/Comandeer/r985w37k/


--------------------
Go to the top of the page
+Quote Post
followc
post
Post #7





Grupa: Zarejestrowani
Postów: 179
Pomógł: 0
Dołączył: 30.12.2013
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


Powoli wyhaczałem moje dramatyczne błędy, nie wiem jednak czy jeszcze we wrześniu skończyłbym ten prosty problem bez Twojej pomocy. Dzięki wielkie!
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 03:58