Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [jQuery] selector dziecko rodzica rodzica wg. klasy, problem z selectorem (1 linijka)
soomal
post 14.11.2009, 15:19:03
Post #1





Grupa: Zarejestrowani
Postów: 38
Pomógł: 1
Dołączył: 4.03.2007

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


Witam. Napisałem głosowanie na produkty w sklepie internetowym.
Po kliknieciu get ajaxem, odbierana jest wiadomość JSON i jeśli w obiekcie zawiera się zmienna 'komunikat' jest wyświetlana w odpowiednim miejscu.
Dopóki głosowanie wyświetlało się na stronie pojedyńczego produktu wszystko było ok (wybierałem pole do wyświetlenia po klasie), teraz wyświetlane jest również na stronie z listą produktów, więc selector tego pola trzeba napisać sprytniej.

Takich bloków jest 9-90 na stronie:
  1. <table cellspacing="0" cellpadding="2" class="voteBox">
  2. <tr><td class="votePrompt">oceń produkt:</td>
  3. <td clas="voteYes"><span class="'.$type.'"><img id="'.$id.'" class="product_vote_yes" src="/images/product_vote_yes.png" /></span></td><td class="YesVotesCount"></td>
  4. <td clas="voteNo"><span class="'.$type.'"><img id="'.$id.'" class="product_vote_no" src="/images/product_vote_no.png" /></span></td><td class="NoVotesCount"></td></tr>
  5. <tr><td colspan="5" class="productVoteInfo">&nbsp;</td></tr>


  1. jQuery(document).ready(function() {
  2. jQuery(".product_vote_yes").live("click",function()
  3. {
  4. var productVoteInfo = jQuery(this).parent().parent().parent().parent().children().filter( jQuery(this).is(":last-child") ); //ten selektor nie dziala, pytam o poprawny.
  5. jQuery.getJSON("/ajax_api.php?action=productVote&type="+jQuery(this).parent().attr("class")+"&vote=yes&id="+jQuery(this).attr("id") ,
  6. function(data)
  7. {
  8. if(data != "")
  9. {
  10. if(data.komunikat)
  11. {
  12. productVoteInfo.addClass("debug");
  13. }
  14. }
  15. }
  16. );
  17. });
  18. }
  19. );

Kluczowy moment w js to 4 linia. Potrzebuje selektora, który cofnie się w drzewie dom do tabelki, a potem wybierze td o klasie 'productVoteInfo'.
Go to the top of the page
+Quote Post
erix
post 14.11.2009, 15:46:09
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




A o parents() słyszałeś?


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
soomal
post 16.11.2009, 02:07:10
Post #3





Grupa: Zarejestrowani
Postów: 38
Pomógł: 1
Dołączył: 4.03.2007

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


Cytat(erix @ 14.11.2009, 15:46:09 ) *
A o parents() słyszałeś?

parents() nic tu nie pomaga, ale winny był mój banalny błąd, dopisałem o jedno children za mało
Go to the top of the page
+Quote Post
Ges
post 16.11.2009, 09:04:25
Post #4





Grupa: Zarejestrowani
Postów: 61
Pomógł: 9
Dołączył: 22.02.2008

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


Myśle, że erix`owi chodziło raczej o zastosowanie:

$(this).parents('table') zamiast serii parent().parent().parent().parent() :]
Co też popieram. Wtedy dodanie czegokolwiek do tej tabelki (jakiegoś jeszcze wiersza / kolumny) nie bedzie wymagało zmiany skryptów JAVY (sic!).

Twoje parent().parent().parent().parent() jest strasznie zależne od widoku aplikacji, co moim zdaniem jest nie do końca poprawne. Oczywiście zależy od tego jaką masz mentalność co do jakości swojego kodu smile.gif Działać będzie i tak i tak smile.gif
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 Wersja Lo-Fi Aktualny czas: 5.05.2025 - 07:28