• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Javascript pobieranie zmiennej

Object Storage Arubacloud
0 głosów
2,486 wizyt
pytanie zadane 17 czerwca 2017 w JavaScript przez BlvckFox Gaduła (4,240 p.)
Witam, chciałbym pobrać z wiersza "cena" wszystkie liczby, umieścić je w tablicy i wykonywać na nich obliczenia. Jak to zrobić bez osobnego podawania "id" do każdego z wierszy osobno?

Kod: https://codepen.io/anon/pen/qjRrVL
1
komentarz 17 czerwca 2017 przez Arkadiusz Waluk Ekspert (287,950 p.)
Pierwsze i najprostsze co przychodzi do głowy: nadać taką samą klasę dla wszystkich komórek z których ma być wyciągnięta liczba i potem odczytać wartości wszystkich o tej klasie?

Edit: heh, Noemi mnie wyprzedziła :)
1
komentarz 17 czerwca 2017 przez imklau Nałogowiec (42,090 p.)

taa, zapewne ściągnąłeś ze mnie cheeky

komentarz 17 czerwca 2017 przez Arkadiusz Waluk Ekspert (287,950 p.)
Ech, wyczaiłaś mnie.. Tylko czekałem aż napiszesz, żeby w 2 sekundy (tyle między naszymi postami było różnicy) przepisać Twoją odpowiedź po swojemu! :D
komentarz 17 czerwca 2017 przez imklau Nałogowiec (42,090 p.)
haha wiedziałam!
w końcu nie bez powodu masz czerwoną nazwę...widocznie trzeba na Ciebie uważać : P
1
komentarz 17 czerwca 2017 przez Arkadiusz Waluk Ekspert (287,950 p.)
Omijać szerokim łukiem bo kopiuje odpowiedzi ;D

3 odpowiedzi

+1 głos
odpowiedź 17 czerwca 2017 przez surfeliza Stary wyjadacz (11,260 p.)
wybrane 20 czerwca 2017 przez BlvckFox
 
Najlepsza

Z tego co pamiętam w każdym a atrybut title ma kategorię oceny, jeżeli nic się nie zmieniło to ten kod jak pisałem powinien nadal działać (wynik w konsoli):

let roczneOceny = document.querySelectorAll('a[title^="Kategoria: roczna"]');
let tablica = [];
let sum = 0;

for(let i=0;i<roczneOceny.length;i++){
	tablica.push(roczneOceny[i].innerText);
	sum += parseInt(tablica[i]);
}
console.log(sum/tablica.length);

 

+3 głosów
odpowiedź 17 czerwca 2017 przez imklau Nałogowiec (42,090 p.)

możesz nadać im jedną klasę i pobrać za pomocą querySelectorAll("nazwa-klasy"), jako kolekcję elementów i wtedy na tym sobie dalej operować.
Ale nie wiem czy jest to dobry pomysł jeśli chodzi o ceny ;)

sprostowanie: kolekcję zwraca getElementsByClassName, a querySelectorAll zwraca Nodelist ;)
obydwa sposoby można wykorzystać do pobrania elementów za pomocą klasy :P

komentarz 17 czerwca 2017 przez BlvckFox Gaduła (4,240 p.)
Ok, a co jeżeli klasy nie wchodzą w grę? Np. chciałbym pobrać wartości z innej strony internetowej na której ręcznie przypisywanie klas byłoby męczące i mijałoby się z celem. Jest coś w javascripcie dzięki czemu można cały wiersz z tabeli pobrać?
komentarz 17 czerwca 2017 przez imklau Nałogowiec (42,090 p.)
o czymś takim jak cały wiersz tabeli to nie słyszałam ;)
poza tym Ty chyba nie chcesz całego wiersza, bo w wierszu masz inne rzeczy poza ceną.
Musiałbyś się bawić wtedy i pobierać dzieci tr, a dokładniej ostatnie dziecko...i to nie licząc pierwszego tr bo tam masz nagłówki.
Poza tym mogłoby się zmienić miejsce ceny i chyba nie ma sensu, czegoś takiego robić.
komentarz 17 czerwca 2017 przez BlvckFox Gaduła (4,240 p.)

Tak dokładniej chciałbym pobrać powiedzmy oceny roczne z librusa i wyliczyć z nich średnią na koniec roku. Na librusie znajduje się tabela Wszystkie oceny mają klase "ocena" więc szukanie po klasach odpada. Wiem, że da się takie coś podobno zrobić.

komentarz 17 czerwca 2017 przez ScriptyChris Mędrzec (190,190 p.)

Czy w Librusie nie ma jakiejś zakładki do wyliczania średniej ocen?

Czy ten skrypt może działać tylko na stronie Librusa, czy chcesz używać go niezależnie od strony tj. jesteś np. na tym forum i chcesz się dowiedzieć jakie masz oceny na Librusie (będąc tam zalogowanym), ale nie przechodząc do ich strony?

Z tego, co widzę po screenie (mógłbyś go umieścić na jakimś zewnętrznym serwisie, np. imgur.com, bo jest trochę niewyraźny), to oceny roczne znajdują się jako ostatnia komórka wiersza. Zobacz w inspektorze elementów, czy rzeczywiście tak jest. Jeśli tak, to możesz (jak zasugerowała @Noemi) użyć metody querySelectorAll() na elemencie <tbody> tej tabeli i wskazywać td:last-child dla każdego wiersza. Niewykluczone, że struktura nie jest jednolita (gdzieniegdzie mogą pojawić się jakieś puste elementy - np. do ostylowania czy wypozycjonowania czegoś tam), więc napisanie selektora wyciągającego to może być krótsza lub dłuższa chwila :)

+1 głos
odpowiedź 17 czerwca 2017 przez dwadolary Gaduła (4,650 p.)
var wiersze = document.getElementsByTagName("TR"),
    oceny = []; 

// pobierasz tresc z  ostatniej komórki i wrzucasz do tabeli
for(i = 1; i < wiersze.length; i++){
  ocena = wiersze[i].lastElementChild.innerHTML;
  oceny.push(parseInt(ocena));
}

var suma = 0;

// dodaje oceny z tabeli
oceny.map(function(el){ 
  suma += el;
});

 

Mało eleganckie rozwiązanie, ale w tym przypadku pasuje. Jeżeli oceny będą w innej kolumnie niż ostatnia, niestety będzie trzeba kombinować. Zamień dodawanie ocen na obliczanie średniej czy co tam planujesz ;)

1
komentarz 18 czerwca 2017 przez X3h Dyskutant (9,540 p.)
Dodajmy trochę elegancji: var sum = ceny.reduce((a,b)=>a+b, 0);

Podobne pytania

0 głosów
1 odpowiedź 99 wizyt
pytanie zadane 14 czerwca 2020 w JavaScript przez Bakkit Dyskutant (7,600 p.)
0 głosów
2 odpowiedzi 665 wizyt
pytanie zadane 25 kwietnia 2017 w PHP przez sapero Gaduła (4,100 p.)
0 głosów
3 odpowiedzi 167 wizyt
pytanie zadane 30 kwietnia 2018 w JavaScript przez NieMaJuzNazw Użytkownik (890 p.)

92,551 zapytań

141,399 odpowiedzi

319,531 komentarzy

61,938 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...