Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [jQuery] selector dziecko rodzica rodzica wg. klasy
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
soomal
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'.
erix
A o parents() słyszałeś?
soomal
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
Ges
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
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.