Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> jQuery DataTables - jak dostac index tr ?
Sadamowski
post 13.06.2012, 14:02:51
Post #1





Grupa: Zarejestrowani
Postów: 20
Pomógł: 1
Dołączył: 4.07.2011

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


Wiatm,

Pytanie jest proste:
jak dostac index <tr> wygenerowany przez datatables.
Oczywiście odpowiedz jest prosta (każdy z Was powie):

  1. var aPos = oTable.fnGetPosition.parent(this);


to oczywiscie dziala wysmienicie jesli mamy zadeklarowane cos takiego: (oczywiscie zakladamy ze oTables jest juz zadeklarowane wczesniej jako $.dataTables();

  1. $('#PendingEmpl_table').on('click', 'tbody tr', function(){
  2.  
  3. var aPos = oTable.fnGetPosition(this);
  4. alert(aPos);
  5. }

itd

ale jesli chce dostac to samo ale klikajac na konkretny element w rzędzie tabeli np: <td> <a class='rem_tr'> Remove </a> </td> itd

to mam coś takiego

  1. $('#PendingEmpl_table').on('click', 'tbody tr .rem_tr', function(){
  2.  
  3. var aPos = oTable.fnGetPosition(questionmark.gif?);
  4. alert(aPos);
  5. }



co wstawic w te znaki zapytania - this oczywiscie odpada. Kombinowalem z parentami i za cholere nic , POMOCY!!
Go to the top of the page
+Quote Post
kamil4u
post 13.06.2012, 15:20:41
Post #2





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

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


Pomógłbym Ci, ale nie znam funkcji: oTable.fnGetPosition ,dlatego mogę tylko strzelać:

Kod
var aPos = oTable.fnGetPosition( $(this).parent() );


Jeżeli nie to opisz po krótko co to robi i jaką masz strukturę HTML-u.

Cytat
Oczywiście odpowiedz jest prosta (każdy z Was powie):
var aPos = oTable.fnGetPosition.parent(this);

Nie wiem dokładni czym jest fnGetPosition, ale jeśli to funkcja, która nic ciekawego nie zwraca( obiektu jQuery dokładnie) to wywali Ci błąd smile.gif


--------------------
Go to the top of the page
+Quote Post
Sadamowski
post 13.06.2012, 17:12:10
Post #3





Grupa: Zarejestrowani
Postów: 20
Pomógł: 1
Dołączył: 4.07.2011

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


hejka,

nie nie,
  1. var aPos = oTable.fnGetPosition.parent(this);


dziala bez zarzutu, zreszta jest to rozwiazanie z przykładów ze strony developerów datatables

a jezeli chodzi o strukture htmlu to mam po prostu tabele z rzadkami:

  1. <tr> <td> Costam</td> <td> costam innego </td> <td> <a href=# class=''rem_tr"> usun </a></td> </tr>


czyli chodzi zeby po kliknieciu na <a> dostać zwrot indeksu tabeli dataTables.

Ten post edytował Sadamowski 13.06.2012, 17:13:10
Go to the top of the page
+Quote Post
kamil4u
post 13.06.2012, 22:31:38
Post #4





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

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


Nadal nie wiem o co chodzi, ale znalazłem rozwiązanie smile.gif

Byłem blisko:
Cytat
var aPos = oTable.fnGetPosition( $(this).parent() );

To nie działa, gdyż funkcja oczekuje referencji do elementu DOM( elementu HTML ), a $(this).parent() zwraca obiekt jQuery, a nie HTML. Czyli trzeb jeszcze użyć funkcji get( http://api.jquery.com/get/ )

Czyli kod będzie wyglądał mniej więcej tak:
Kod
var aPos = oTable.fnGetPosition( $(this).parent().parent().get(0) );


Jest użyte 2 razy parent, gdyż masz strukturę tr->td->a ,a Ty wychodzisz od <a>. Nie chce mi się sprawdzać( patrz dokumentacja jQuery ), ale chyba można zastąpić
parent().parent() na ładniejsze parent(2)


Jakby coś nadal nie działało, to zanim napiszesz to trochę potestuj to rozwiązania, a jak to nie pomoże to umieść przykładowy kod tu: http://jsfiddle.net/ - możesz tam dołączyć biblioteki jQuery


--------------------
Go to the top of the page
+Quote Post
Sadamowski
post 14.06.2012, 07:59:48
Post #5





Grupa: Zarejestrowani
Postów: 20
Pomógł: 1
Dołączył: 4.07.2011

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


kamil4u, dzieki za odpowiedz

rozwiazanie niestety nie dziala, ale jakos jeszcze pokombinuje
chetnie puscilbym to jfidlu ale niestety nie mozna tam dolaczyc biblioteki dataTable



ale chwile później ( yerba-mate pomaga na mózg szczególnie z rana) pomyslałem po jakiego diabła mi ta kijowa funkcja
napisze sobie własną (nie koniecznei funkcje ale taka mala procedurke), no i napisałem:

var rowIndex = $(this).closest('tr').prevAll().length;
albo
var rowIndex = $(this).parent().parent().index();

do wyboru do koloru

no i działa,

jeszce raz kamilowi4u dzieki za odzew

milego dnia

Ten post edytował Sadamowski 14.06.2012, 08:36:07
Go to the top of the page
+Quote Post
k_@_m_i_l
post 14.06.2012, 10:10:05
Post #6





Grupa: Zarejestrowani
Postów: 349
Pomógł: 72
Dołączył: 22.01.2008
Skąd: Wadowice/Oświęcim

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


Zamiast parent().parent() możesz użyć parents("tr") i też Ci zwróci to samo. A w przypadku zmiany struktury (dojdzie jakiś dodatkowy div itd), parent().parent() może przestać działać. Z parents("tr") nie powinno być problemu.


--------------------
"PHP to człowiek. MySQL to również człowiek."
Go to the top of the page
+Quote Post
kamil4u
post 14.06.2012, 12:14:53
Post #7





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

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


Jesteś na 100% pewien, że nie działa? Bo zanim napisałem robiłem proste testy:

1. http://datatables.net/api#fnGetPosition
2. klikam "Run in JS Bin"
3. Patrzę jak działa skrypt: jak klikam na td to zmienia się jego treść:
Kod
   $(document).ready(function() {
   $(document).ready(function() {
     $('#example tbody td').click( function () {
       // Get the position of the current data from the node
       var aPos = oTable.fnGetPosition( this );
      
       // Get the data array for this row
       var aData = oTable.fnGetData( aPos[0] );
      
       // Update the data array and return the value
       aData[ aPos[1] ] = 'clicked';
       this.innerHTML = 'clicked';
     } );
    
     // Init DataTables
     oTable = $('#example').dataTable();
   } );
   } );

4. Usuwam większość kodu( jak kilkam wyświetla mi alert-a, a nawet 2 ):
Kod
   $(document).ready(function() {
     $('#example tbody td').click( function () {
       alert( this );
       var aPos = oTable.fnGetPosition( this );
       alert( aPos );
     } );
    
     // Init DataTables
     oTable = $('#example').dataTable();
   } );

5. Dodaję mój kod z poprzedniego posta:
Kod
   $(document).ready(function() {
     $('#example tbody td').click( function () {
       alert( $(this).parent("tr").get(0) );
       var aPos = oTable.fnGetPosition( $(this).parent("tr").get(0) );
       alert( aPos );
     } );
    
     // Init DataTables
     oTable = $('#example').dataTable();
   } );


I jak klikam uzyskuję numer klikniętego tr. On jest tam w okolicach 6 na pierwszym <tr>, bo tak jest skonstruowana na tabela - zobacz przez firebug-a


--------------------
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: 28.05.2025 - 23:56