Metoda .find().

0

Witam,

mam tabelę w której jest X wieszy i kolumn. Oznaczam div'em o id='changed' tylko te pola tabeli, które mnie interesują. Aby wyszukać te pola napisałem następujący skrypt

 $(document).ready(function(){
    $('#send').click(function(){     // Kliknięcie na przycisk
       var List = $('div[id=changed]').find('td').attr('id'); // Wyszukanie odpowiedniiego pola
    alert(List);  // Alert
    });
    });

Tabela:

 <table id="testtable" border="1"  style="width:70%">   
        <tr id="1">
            <td id="1">tr 1 td 1</td>
            <td id="2">tr 1 td 2</td>
            <td id="3">tr 1 td 3</td>    
        </tr>
<!-- Pole ktore chce wyciagac -->
        <tr id="2">
          <td id="1">tr 2 td 1</td>
          <div id='changed' title="DADA">   
              <td id="2"><input type ="text" readonly value="test"></input>              
              </td>
          </div>
<!-- ---------------------------------------------- -->
          <td id="3">tr 2 td 3</td>
        </tr>
        <tr id="3">
            <td id="1">tr 3 td 1</td>
            <td id="2">tr 3 td 2</td>
            <td id="3">tr 3 td 3</td>
        </tr>      
    </table>

Alert, który ma wyświetlić wynik tej operacji daje wartośc niezdefiniowaną. W czym jest problem ?

0

Po pierwsze - id muszą być unikalne w obrębie dokumentu - jak chcesz sobie numerować elementy listy to użyj zamiast tego data-id.

$('div[id=changed]') ?? => $('#changed')

Poza tym nie próbujesz wyszukać pola tylko próbujesz wyświetlić id elementu, chyba nie o to chodziło.

No i masz błędy w kodzie html (zbędne spacje).

0

Chodzi mi o id elementu ponieważ to ID zawiera klucze, które wykorzystam w bazie danych.

var List = $('div[id=changed]').attr('id'); Ten kod jak usunę i nie będę szukał elementow 'td' w DIV'ie to zwraca mi ID DIV. Jednak ja potrzebuje id .

0

Id nie służy do przechowywania danych, służy jak sama nazwa wskazuje do identyfikowania elementu na stronie. Robisz jakąś straszną głupotę, że ciężko mi to ogarnąć - napisz dokładnie co chcesz osiągnąć a nie jak chcesz to zrobić.

0

Nie rozumiemy się, ja nie chce w id przechowywać danych. Jest to jedynie jak mówisz identyfikowanie elementów. Ja sobie w DIV oznaczam przez id czy dany element był zmieniany czy nie był zmieniany. Po czym wyszykuje tylko tych, które są zmienione. ID wiersza jest w relacji z Obiektem, które reprezentuje osoby, natomiast ID kolumny również nie jest przypadkowy, tylko reprezentuje kolejny obiekt.

podsumowując każde pole tej tabeli ma ID wiersza i ID kolumny wszystko jest złapane w DIV'a w celu wyselekcjonowania jedynie tych pół, które zmieniłem. Akurat to, że id mi się powtarza nie jest dla mnie problemem, a zabiegiem celowym. Umożliwia mi to zarówno logiczne uzupełnianie tabeli jaki pobieranie z niej danych.

Problem jest w tym, że jak mam DIV'a o id='changed' to mogę go znaleźć bez problemu. Jednak jak dopiszę .find('td') to już tego elementu TD nie znajdę.

0
Malen napisał(a):

nie chce w id przechowywać danych. [...] Ja sobie w DIV oznaczam przez id czy dany element był zmieniany czy nie był zmieniany.

Czyli robisz dokładnie to czego nie powinieneś robić - przechowujesz w id informację o stanie obiektu. Do takich rzeczy służy atrybut data- lub nadanie dodatkowej klasy dla elementu.

Poza tym powtarzam jeszcze raz - id muszą być unikalne w obrębie całej strony.

0

Jeżeli umieszczę

między znacznikiem w ten sposób:</p>
  <td id="2">
                  <div id='changed' title="DADA" class="">
                  <input type ="text" readonly value="test"></input>              
              </div>
              </td>

i skrypt przerobię w ten sposób:

var List = $('td').find('div[id=changed]').attr('id');

To działa i znajduję bez problemu

i jego id.</p>

Jednak gdy sytuacja jest dokładnie odwrotna, czyli najpierw

a między znacznikami DIV to już nie działa.
Nie wydaje mi się, żeby powtarzalność ID elementów była tu problemem. Bo nawet jak zrobię unikalne ID to i tak jak najpierw znajdę DIV a potem w jego kontekście będę szukał innych elementów to ich nie znajdę.</p>
0

.find('div[id=changed]').attr('id');
Wytłumacz mi sens tego, bo ja go nie pojmuję. Pobierasz element o podanym id (w niepoprawny sposób), żeby sprawdzić jego id?? To tak jakbyś napisał na kartce z pamięci swoje imię, żeby wiedzieć jak masz na imię xD

0

Już tłumaczę. Generalne jest to zrobione w celach testowych. Bez sensu zupełnie, ale równie dobrze mogę inny atrybut pobierać. Chodzi tylko o testy. Nad tym, czy jest to logiczne czy nie nie warto się zastanawiać :D.

0

Ok, poddaję się.

0

zmieniłem nieco koncepcje i porzuciłem <DIV>, z tego względu, że wówczas nie mogę iść dalej i wyszukiwać obiektów . Żeby było to możliwe, musi miedzy <DIV> pojawić się

. Ale wykorzystałem atrybut 'data-bind'. Skrypt działa czyli wyciąga mi 3 wartości w każdego pola w tabeli:</p>
  1. Text
  2. Id Columny
  3. Id. wiersza.
Skrypt:

var List = [];
    
    $(document).ready(function(){
    $('#send').click(function(){
      var at = $('td[data-bind=changed]').toArray();
   for(i = 0; i < at.length; i++)
       {    
           List[i] = jQuery.makeArray(['text: ' + at[i].innerHTML,'ZA ' + at[i].id, 'DLA ' + $(at[i]).closest('tr').attr('id')]);
            alert(List[i]);
       }
    });
    });

HTML:

  <table id="testtable" border="1"  style="width:70%">   
        <tr id="1">
            <td id="1">tr 1 td 1</td>
            <td data-bind="changed" id="2">3</td>
            <td id="3">tr 1 td 3</td>    
        </tr>
        <tr id="2">
          <td id="1">tr 2 td 1
          </td>
              <td id="2">       
                  3
              </td>
                </div>
          <td id="3">tr 2 td 3</td>
        </tr>
        <tr id="3">
            <td id="1">tr 3 td 1</td>
            <td id="2">tr 3 td 2</td>
            <td data-bind="changed" id="3">5</td>
        </tr>      
    </table>

Oznaczam pola:

$(document).ready(function(){
    $('td').click(function(){
        $(this).attr('data-bind','changed');
    
    });
    });

1 użytkowników online, w tym zalogowanych: 0, gości: 1