Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z "nextSibling"
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
klaudio
Witam
Mam taki problem. Mianowicie mam tabelke, i jest w niej 5 wierszy, kazdy z wierszy ma ID i odpala sie taka funkcja onclick="tabelka(this);" po kliknieciu na wiersz. I teraz chodzi mi o to ze np. jak klikne w wiersz o ID dwa to funkcja ma przejsc na noda za nim, czyli na noda o ID trzy i wypisac w alercie "trzy".
Kod ponizej wypisuje mi undefined. Czy ktos ma jakis pomysl jak t zrobic.

Z gory dziekuje za pomoc i pozdrawiam smile.gif

<table border='0' cellspacing='0' cellpadding='0'>
<tr id="jeden" onclick="tabelka(this);"><td>1</td></tr>
<tr id="dwa" onclick="tabelka(this);"><td>2</td></tr>
<tr id="trzy" onclick="tabelka(this);"><td>3</td></tr>
<tr id="cztery" onclick="tabelka(this);"><td>4</td></tr>
<tr id="piec" onclick="tabelka(this);"><td>5</td></tr>
</table>

<script>
var child;
function tabelka (e){
child = e;
child = child.nextSibling;
alert(child.id);
}
</script>
erix
Puść to gdzieś na żywo, bo kontekst jest istotny.

Poza tym, pamiętaj, że nextSibling może też łapać zawartość, która znajduje się między tagami.
kamil4u
Cytat
Poza tym, pamiętaj, że nextSibling może też łapać zawartość, która znajduje się między tagami.

Dokładnie o to chodzi w tym problemie. Rozwiązanie: http://stackoverflow.com/questions/574904/...sing-javascript z kodem:
Kod
var div = document.getElementById('foo2');
var nextSibling = div.nextSibling;
while(nextSibling && nextSibling.nodeType != 1) {
    nextSibling = nextSibling.nextSibling
}


Jeśli czegoś nie rozumiesz w tym kodzie to się zapytaj.
klaudio
Dzieki "kamil4u" Dokladnie o to chodzilo smile.gif Wszystko dziala idealnie.

A teraz mam jeszcze inne pytanie w tej samej tematyce. Zalozmy ze mam takie cos jak ponizej, i mam dwie tabele w jednym divie i tak samo chce klikajac na TR o ID dwa zeby przeszedl na nastepnya TR i pokazal mi alert "trzy" itd. ale w tym wypadku jak klikne na TR o ID piec to jest null jako ze dajej juz nie ma. Czy jest mozliwosc zrobienia tak ze jak klikne na TR o ID piec to wyswietli mi alert "szesc"questionmark.gif

Z gory dzieki jeszcze raz za odpowiedz i pozdrawiam.

<div id="container">
<table id="t1" border='0' cellspacing='0' cellpadding='0'>
<tr id="jeden" onclick="tabelka(this);"><td>1</td><td>1</td></tr>
<tr id="dwa" onclick="tabelka(this);"><td>2</td><td>2</td></tr>
<tr id="trzy" onclick="tabelka(this);"><td>3</td><td>3</td></tr>
<tr id="cztery" onclick="tabelka(this);"><td>4</td><td>4</td></tr>
<tr id="piec" onclick="tabelka(this);"><td>5</td><td>5</td></tr>
</table>
<table id="t2" border='0' cellspacing='0' cellpadding='0'>
<tr id="szesc" onclick="tabelka(this);"><td>6</td><td>6</td></tr>
<tr id="siedem" onclick="tabelka(this);"><td>7</td><td>7</td></tr>
<tr id="osiem" onclick="tabelka(this);"><td>8</td><td>8</td></tr>
<tr id="dziewiec" onclick="tabelka(this);"><td>9</td><td>9</td></tr>
<tr id="dziesiec" onclick="tabelka(this);"><td>10</td><td>10</td></tr>
</table>
</div>

<script>
var child;
function tabelka (e){
child = e;
child = child.nextSibling;

while(child && child.nodeType != 1){
child = child.nextSibling;
};

if(child == null){
alert("wiecej TR nie ma");
}
alert(child.id);
}
</script>
kamil4u
W skrócie mógłbyś zrobić tak:
Kod
if(child == null){
child = document.getElementById('t2').getElementsByTagName('tr')[0];
}
, ale lepszym rozwiązaniem zrobienie tego tak( pseudokod ):
Kod
var elements = id("container").pobierzElementy("tr"); //tablica elementów -> getElementsByTagName
pętla_po( elements,i ){ //for
elements[i].zdarzenie_click = funkcja(){ // dodanie zdarzenia click
   alert( elements[i+1].id );
}
}


Przypisanie zdarzenia w pętli musisz zrobić na wzór: http://forum.php.pl/index.php?s=&showt...st&p=872817
klaudio
Wielkie dzieki "kamil4u" jestes Lkingsmiley.png i jedno i drugie rozwiazanie jest takie jakiego szukam i potrzebuje.

Pozdrawiam !
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.