Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [jQuery] Poruszanie się po drzewie DOM
gebp
post
Post #1





Grupa: Zarejestrowani
Postów: 180
Pomógł: 6
Dołączył: 10.04.2006

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


Mam problem aby dostać się do odpowiedniego elementu ( w drzewie DOM) za pomocą jQuery (aby przypisać mu zdarzenie onclick) W javascript bym sobie poradził ale chcę się nauczyć chociaż trochę jQuery.
  1. <table id="tab" cellspacing="0" border="1">
  2. <tr>
  3. <td> Chcę się dostać do tego elementu </td>
  4. <td> i tego </td>
  5. <td> i tego </td>
  6. <td> i tego </td>
  7. <td> i tego </td>
  8. <td> i tego </td>
  9. </tr>
  10. <tr>
  11. <td> Ale NIE tego</td>
  12. <td> i tego też nie</td>
  13. <td>ten także jest zabroniony</td>
  14. <td> i ten</td>
  15. <td>WYKLUCZONE</td>
  16. <td> rówież </td>
  17. </tr>
  18. <br />
  19. <button onclick="test('tab')">Test</button>
  20.  


i skrypt (a raczej to co wymyśliłem ale nie działa)
  1. <script type="text/javascript">
  2. function test(idtab){
  3.  
  4. $('#'+idtab).first("tr").each( function (i, el) {
  5. $(el).css("backgroundColor", "yellow");
  6. $(el).click( function () {
  7. alert("to jest komórka nr "+i);}
  8. );
  9. });
  10.  
  11. }
  12.  
  13.  


Dzięki za wszystkie podpowiedzi i wyjaśnienia.

P.S. Wiem że dziwnie (inaczej niż wzorzec jQuery) pisze funkcje jednak tak mi jest wygodniej.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
#luq
post
Post #2





Grupa: Zarejestrowani
Postów: 589
Pomógł: 91
Dołączył: 22.05.2008
Skąd: Gliwice

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


Tylko musisz zważyć na to, że każda metoda zwraca obiekt jQuery. A więc:
[JAVASCRIPT] pobierz, plaintext
  1. $(...).find(...).first(...).children(...)
[JAVASCRIPT] pobierz, plaintext

będzie wolniejsze jeśli to opisać selektorami.

Nie ma przeszkód żebyś napisał:
[JAVASCRIPT] pobierz, plaintext
  1. $("#" + idtab + " tr:first td").each(...);
[JAVASCRIPT] pobierz, plaintext

i właśnie w ten sposób powinieneś to zrobić.
Go to the top of the page
+Quote Post
zegarek84
post
Post #3





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

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


Cytat(#luq @ 10.01.2011, 21:28:35 ) *
Tylko musisz zważyć na to, że każda metoda zwraca obiekt jQuery. A więc:
[JAVASCRIPT] pobierz, plaintext
  1. $(...).find(...).first(...).children(...)
[JAVASCRIPT] pobierz, plaintext

będzie wolniejsze jeśli to opisać selektorami.

Nie ma przeszkód żebyś napisał:
[JAVASCRIPT] pobierz, plaintext
  1. $("#" + idtab + " tr:first td").each(...);
[JAVASCRIPT] pobierz, plaintext

i właśnie w ten sposób powinieneś to zrobić.
może inaczej (IMG:style_emoticons/default/winksmiley.jpg) - bardziej elegancko to wygląda (IMG:style_emoticons/default/winksmiley.jpg) - zacznę od tego, że druga metoda także opisuje dostęp przez selektory - tyle że css [też nie do końca gdyż first !== first-child] które muszą być prze parsowane zwłaszcza w starszych przeglądarkach... jQuery korzysta z Sizzle i nie każda przeglądarka w pełni obsługuje querySelector [czy jak się ta metoda zwie] - selektory muszą być przeparsowane i musza być wykonane odpowiednie metody po drodze jak getElementsByTagName... to pierwsze co krytykowałeś fakt zwraca obiekt jQuery, potem go modyfikuje lub zwraca nowy [zbyt dawno temu przeglądałem to by być pewny tego], ale większa część jQuery jest napisana na prototype - więc większość metod i własności jest zwracanych przez klonowanie a nie są tworzone od nowa... czasami "brzydszy" kod nie musi być wolniejszy - testy i jeszcze raz testy i to na kilku przeglądarkach - najlepiej skrajne na IE i wkurzającym także google chrome ;] [gdzie chyba wycinając niektóre flaki uzyskali taką szybkość a potem się męcz...]...

ps. wiem - teraz wspomnę o IE - ale też o jQuery... jak mnie poproszono bym rozwiązał problem z IE [którego nie mam na laptopie to musiałem to zrobić na innym kompie] to okazało się, że choć wszystko napisane przez jQuery [nie licząc innych błędów po drodze dla IE] to nie ma tam także zdarzenia 'input' dla IE - to po co wogóle ono tam było jak to nie problem dopisać "piaskownicę" na zdarzenie...

ja wiem o tym:
Cytat
In older, pre-HTML5 browsers, "keyup" is definitely what you're looking for.

In HTML5 there is a new event, "input", which behaves exactly like you seem to think "change" should have behaved - in that it fires as soon as a key is pressed to enter information into a form.

Kod
$('element').bind('input',function);

ale szukaj wiatru w polu jak nie ma się IE ^^

a i children też mi się posypało - a myślałem, że większość rzeczy przemyśleli - a nie zrobili kluczowej [nie wiem jak teraz] - nie przekazali dzieci do "normalnej" tablicy jak to nawet w większości podstawowych tutoriali js jest wspomniane gdy bardziej skomplikowane operacje an dzieciach chcemy zrobić...

Ten post edytował zegarek84 11.01.2011, 00:40:38
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 17.10.2025 - 20:31