Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: getElementByClass
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
zurek
Witam
Mam następujący fragment kodu:

Kod
<div class="test">Jakaś treść</div>


Problem polega na tym, że nie wiem jak wyłowić tekst "Jakaś treść". Nie było by nic do gadania, gdyby było tam id albo name, ale z class musi być i nie wiem jak to zrobić. Słyszałem o jakiejś funkcji getElementByClassName, ale podobno działa tylko w Firefox'ach 3 dry.gif
nospor
uzyj jQuery i nie bedziesz sie meczyl:
Kod
jQuery('.test')
zurek
Dziękuję ci bardzo za pomoc. Jednak czy jest jakiś sposób zrobić to w JS?
sowiq
Cytat(zurek @ 5.03.2009, 22:15:46 ) *
Słyszałem o jakiejś funkcji getElementByClassName, ale podobno działa tylko w Firefox'ach 3
Nie ma takiej funkcji. Co najwyżej getElementsByClassName -> http://www.google.pl/search?hl=pl&q=ge...&lr=lang_pl

Ale ~nospor ma rację. A jQuery to nic innego jak JS smile.gif
nospor
Cytat
ednak czy jest jakiś sposób zrobić to w JS
oczywiscie.
Pobierasz wszystkie divy (getElementsByTagName()) a nastepnie sprawdzasz kazdy pokolei czy ma taką klase jakiej szukasz.
zurek
Wiem, że jQuery to JS, ale nie miałem jeszcze z nią do czynienia. Nie za bardzo wiem jak użyć. Przy pierwszej próbie wyskoczyło mi głupie [object Object] wstydnis.gif
nospor
Bo to co ci podalem zwraca ci obiekt jQuery. W tym przypadku obiekt ten zawiera divy z klasą test.
Jak chcesz np. je schowac to robisz:
Kod
jQuery('.test').hide();

Polecam dokumentacje smile.gif
zurek
Dobra, rzeczywiście muszę poczytać w dokumentacji. Chodzi mi głównie o to, żeby wyłowić ten tekst z tego div'a i zapisać np. do bazy danych winksmiley.jpg
nospor
no ale js nie ma nic do bazy danych.
Czy ty pobierasz te dane w php z innego serwisu? Jak tak to zupelnie inaczej to trzeba zrobic.
zurek
Cytat(nospor @ 5.03.2009, 23:12:47 ) *
no ale js nie ma nic do bazy danych.
Czy ty pobierasz te dane w php z innego serwisu? Jak tak to zupelnie inaczej to trzeba zrobic.


Jeszcze do końca nie wiem. W każdym razie chodzi mi o zebranie informacji z kilku serwisów i zapisanie danych w bazie danych. Mówisz, że inaczej trzeba zrobić? Jeżeli możesz, wytłumacz mi. I dzięki z góry za cierpliwość i odpowiedzi.
nospor
po stronie serwera - php:
file_get_contents() a nastepnie preg_match() - bylo na forum wiele razy
zurek
Cytat(nospor @ 5.03.2009, 23:37:04 ) *
po stronie serwera - php:
file_get_contents() a nastepnie preg_match() - bylo na forum wiele razy

W PHP wiem jak wczytać. Problem w tym jak wyłowić odpowiednie fragmenty. Myślałem, żeby właśnie w PHP wczytać treść strony, w JS wybrać dane i zapisać w PHP do bazy danych.
nospor
Cytat
Problem w tym jak wyłowić odpowiednie fragmenty

No i wlasnie do tego sluzy preg_match(), ktore ci podalem w poprzednim poscie smile.gif
Od biedy mozesz w php bawic sie tez DOMem
zurek
Mam taki fragment:

  1. <div class="result">
  2. <div class="top oz_wrap">
  3. <!-- 545743 -->
  4. <div class="c0">
  5. <strong><a href="200,4001,,545743,,Programista+Java.html">Programista Java</a></strong>
  6. <span class="t_where">
  7. PL,
  8. maz., ŁÓDŹ
  9. </span>


I chcę przykładowo wyłowić adres URL i zawartość bloku t_where z lokalizacją. Napisałem coś takiego:

  1. <?php
  2. preg_match("/<a href=\"(.+)\">/",$string, $results);
  3. echo '<b>URL:</b> '.$results[1] .'<br/>';
  4. preg_match("/<span class=\"t_where\">(.+)/",$string, $results);
  5. echo '<b>Kraj, Miasto, Wojewdztwo:</b> '.$results[1] .'<br/>';
  6. ?>


Z adresem URL wszystko jest w porządku, ale nie mogę wydobyć tej lokalizacji. Myślę, że problem polega na tym, że preg_match() działa w porządku, ale źle wyświetlam dane. Możliwe, że coś źle z tymi tablicami zrobiłem... Powinny się zaczynać od 0, ale od zera nie działa. Mój problem może się wydawać trochę głupi, ale proszę o wyrozumiałość winksmiley.jpg
rzymek01
5. linia

  1. <?php
  2. preg_match('#<span class=\"t_where\">(.+?)</span>#is',$string, $results);
  3. ?>


edit.
jesli jest tego więcej na stronie to poczytaj o preg_match_all smile.gif
zurek
Dziękuję ci bardzo z pomoc. Wszystko działa teraz ok winksmiley.jpg Mam jeszcze pytanie. Chcę zrobić prostego boota, który będzie wchodził na wybrane przeze mnie strony internetowe. Jednak te nie mają wydzielonych plików XML, ani regularnej struktury. Czy poprawnym rozwiązaniem jest napisanie dla każdej z nich osobnego algorytmu indeksowania?
erix
Cytat
Czy poprawnym rozwiązaniem jest napisanie dla każdej z nich osobnego algorytmu indeksowania?

i sobie odpowiedziałeś:
Cytat
Jednak te nie mają wydzielonych plików XML, ani regularnej struktury


Nie będziesz miał wyjścia, gdyż każda strona ma przecież inną budowę. winksmiley.jpg
zurek
Jeszcze jedno pytanie. Wyciąganie danych mam już z głowy i działa świetnie. Tylko teraz mam problem, bo to wyciąganie danych odbywa się w obrębie ściśle określonego fragmentu kodu:

  1. <div class="result">
  2. <div class="top oz_wrap"><!-- 545743 -->
  3. <div class="c0">
  4. <strong><a href="200,4001,,545743,,costam.html" >Tytul</a></strong>
  5. <span class="t_where">tekst</span>
  6.  
  7. <span class="t_salary">
  8.  
  9. </span>
  10.  
  11. </div>
  12.  
  13.  
  14. <div class="c1">
  15.  
  16. <a href="0,139,,694441.html">
  17.  
  18. costam
  19.  
  20. </a>
  21.  
  22. </div>
  23.  
  24.  
  25. <div class="c2">
  26. W serwisie od:
  27. <span>
  28.  
  29.  
  30.  
  31. 21 dni
  32.  
  33. </span>
  34. </div>
  35. </div>
  36. <p class="description">cos
  37. ble ble ble...
  38. ble ble ble...
  39. ble ble ble...
  40. ble ble ble...
  41. ble ble ble...
  42.  
  43.  
  44. ble ble ble...
  45. ...<a href="200,4001,,545743,, ble ble ble... " >więcej</a></p>
  46. </div>


Na stronie znajduje się kilka takich fragmentów i najlepiej byłoby je zapisać do tablicy. Problem w tym, że nie wiem jak to podzielić i nie wiem jak odrzucić pozostały kod (początek i koniec). Prosiłbym o jakąkolwiek pomoc. Dzięki za wszystko winksmiley.jpg
zurek
Mam jeszcze pytanie. Czy da się w tej funkcji preg_match_all() zrobić coś takiego, aby w danych fragmencie kodu wyszukiwał dwóch opcji, czyli że jak pierwsza nie spełnia warunku to użyje drugiej? Próbowałem zrobić coś takiego, że sprawdzałem czy funkcja zwraca 0 czy 1, ale jakoś mi nie wyszło.

Na przykład mamy taki kod:

  1. <div class="klasa">
  2. <a href="adres URL">tekst 1</a>
  3. </div>
  4.  
  5. <div class="klasa">
  6. tekst2
  7. </div>


Drugi problem polega na tym, że poniższa funkcja nie zwraca mi adresu URL z powyższego kodu:

  1. <?php
  2. preg_match_all('/<div.*class=\"klasa\">.*<a.*href=\"([^\"]*)\".*>.*</a>.*</div>/iU', $string, $URL);
  3. ?>
erix
Pionowa kreska w wyrażeniu (na klawiaturze, obok backspace'a winksmiley.jpg).

Ale to już nie jest temat dotyczący przeglądarek. tongue.gif
zurek
A co z drugim problemem? Co zrobiłem źle?
erix
Kod
([^\"]*)

Chyba nie podałeś znaków, które są dozwolone.
zegarek84
Cytat(zurek @ 14.03.2009, 18:56:57 ) *
A co z drugim problemem? Co zrobiłem źle?

wyrażenie jest dobrze tylko doczytaj o:
Pattern Modifiers
dorzuć do swojego na końcu małą literkę s winksmiley.jpg
ps. - skoro wyrażenie masz w pojedyńczym cudzysłowiu to podwujny w tym przypadku nie musisz traktować jako znak specjalny i też będzie dobrze winksmiley.jpg
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.