Witam, mam tabelkę oraz kod JS, dzięki któremu jestem w stanie zmienić wartości znajdujące się w komórkach. Jednak działa on na wszystkich komórkach. Chciałbym tą operację wykonywać na poszczególnych komórkach, np. o id:zmiana
Tabelka
<table border="1" id="s" width="100%"> <tr class="google-visualization-table-tr-head"> <td class="sortowanie">Lp.
</td> <td class="sortowanie">Nazwa
</td> <td class="sortowanie"> Data dodania
</td> <td class="sortowanie"> CENA PLN
</td> <td class="sortowanie"> Firma
</td> <tr class="google-visualization-table-tr-odd"> <td>Telewizor Plazmowy
</td>
a to kod JS
onload=function()
{
for(var i=0,TR; TR=document.getElementsByTagName('tr')[i++];) //wiersze
{
for(var j=0,TD; TD=TR.getElementsByTagName('td')[j];j++) //kratki
{
if(TD.className=='sortowanie')
{
TD.numer=j; //nadawanie parametru numer
TD.klikniety=0;
TD.onclick=function(){ klikniety(this); sort(this.numer,this);} //nadawanie akcji Onclick
TD.onmouseover=function(){ kolor(this,1) };
TD.onmouseout=function(){ kolor(this,2) };
}
else
{
TD.onclick=function() { zmien_wartosc(this); } //mozliwosc zmiany wartosci pola
}
}
}
}
function kolor(obj,typ)
{
if(typ==1 && obj.klikniety==0);
if(typ==2 && obj.klikniety==0);
}
function zmien_wartosc(obj)
{
if(confirm("Czy chcesz zmienic wartosc tego pola ? \r\n("+obj.innerHTML+") ?"))
{
var zmiana=prompt("Zmien wartosc tego pola z : "+obj.innerHTML,"");
if(zmiana=="") { alert("Pole nie uległo zmianie"); }
else
{
alert("Wartosc usunieta : "+obj.innerHTML+"\r\nNowa wartosc : "+zmiana);
obj.innerHTML=zmiana;
}
}
}
var lastClick=new Object();
function klikniety(obj)
{
if(lastClick.klikniety==2 || (lastClick.klikniety==1 && obj.klikniety==0)){ lastClick.style.background="red"; lastClick.klikniety=0; }
if(obj.klikniety==1) { obj.style.background="lightblue"; obj.klikniety=2; obj.znak=1;}
if(obj.klikniety==0) { obj.style.background="blue"; obj.klikniety=1; obj.znak=-1; }
lastClick=obj;
}
function sort(numer,Obiekt)
{
// w ktorym kierunku ma sortowac od dolu czy od gory
(Obiekt.znak>0) ? (Obiekt.znak=-1) : (Obiekt.znak=1);
var TBODYobj=Obiekt.parentNode.parentNode.parentNode.getElementsByTagName('tbody')[0];
var c=new Array();
for(var i=0,TRobj; TRobj=TBODYobj.getElementsByTagName('tr')[i]; i++)
{
c[i]=[]; //pierwszy wymiar tablicy
for(var j=0;TDobj=TRobj.getElementsByTagName('td')[j];j++)
{
c[i][j]=TDobj.innerHTML; /*lub firstChild.data zamiast innerHTML*/;
}
}
/*po zmiennej numer poznaje kolumne ktora ma sortowac */
/*zmienna znak natomiast powoduje ze sortowanie moze byc ascending lub descending */
c.sort( function (a,B){ return Sprawdz(a[numer],b[numer]) ? Obiekt.znak : (-Obiekt.znak) } );
//sortowanie za pomoca zdefiniowanej funkcji
for(var i=0,TRobj;TRobj=TBODYobj.getElementsByTagName('tr')[i];i++)
{
for(var j=0;TDobj=TRobj.getElementsByTagName('td')[j];)
{
TDobj.innerHTML=c[i][j++]; /*lub firstChild.data zamiast innerHTML*/;
}
}
}
/* Uwaga Stosujac InnerHTML mozna spowodowac bledy w niektorych przegladarkach internetowych */
function Sprawdz(x,y) //funkcja sprawdzajaca czy element X ma byc nad elementem Y
{
var r=/^[0-9\.]+$/i;
var HTMLreg=/<.*?>/i;
//-----usuwa kod HTML ze srodka tagow aby nie zaburzal sortowania
x+=''; y+='';
x=x.replace(HTMLreg,'');
y=y.replace(HTMLreg,'');
//--- bierze pod uwage tylko znaki alfabetu i cyfry przy sortowaniu
if(x.match && y.match) //sortowanie liczb
{
//document.write(x+' '+y);
if(parseFloat(x)>parseFloat(y)) return true;
else return false;
}
// sortowanie znakow
if (x>y) return true;
else return false;
}
Ok, już sobie odpowiadam

onload=function()
{
for(var i=0,TR; TR=document.getElementsByTagName('tr')[i++];) //wiersze
{
for(var j=0,TD; TD=TR.getElementsByTagName('td')[j];j++) //kratki
{
if(TD.className=='sortowanie')
{
TD.numer=j; //nadawanie parametru numer
TD.klikniety=0;
TD.onclick=function(){ klikniety(this); sort(this.numer,this);} //nadawanie akcji Onclick
TD.onmouseover=function(){ kolor(this,1) };
TD.onmouseout=function(){ kolor(this,2) };
}
else if(TD.className=='zmiana')
{
TD.onclick=function() { zmien_wartosc(this); } //mozliwosc zmiany wartosci pola
}
}
}
}
function kolor(obj,typ)
{
if(typ==1 && obj.klikniety==0);
if(typ==2 && obj.klikniety==0);
}
function zmien_wartosc(obj)
{
if(confirm("Czy chcesz zmienic wartosc tego pola ? \r\n("+obj.innerHTML+") ?"))
{
var zmiana=prompt("Zmien wartosc tego pola z : "+obj.innerHTML,"");
if(zmiana=="") { alert("Pole nie uległo zmianie"); }
else
{
alert("Wartosc usunieta : "+obj.innerHTML+"\r\nNowa wartosc : "+zmiana);
obj.innerHTML=zmiana;
}
}
}
var lastClick=new Object();
function klikniety(obj)
{
if(lastClick.klikniety==2 || (lastClick.klikniety==1 && obj.klikniety==0)){ lastClick.style.background="red"; lastClick.klikniety=0; }
if(obj.klikniety==1) { obj.style.background="lightblue"; obj.klikniety=2; obj.znak=1;}
if(obj.klikniety==0) { obj.style.background="blue"; obj.klikniety=1; obj.znak=-1; }
lastClick=obj;
}
function sort(numer,Obiekt)
{
// w ktorym kierunku ma sortowac od dolu czy od gory
(Obiekt.znak>0) ? (Obiekt.znak=-1) : (Obiekt.znak=1);
var TBODYobj=Obiekt.parentNode.parentNode.parentNode.getElementsByTagName('tbody')[0];
var c=new Array();
for(var i=0,TRobj; TRobj=TBODYobj.getElementsByTagName('tr')[i]; i++)
{
c[i]=[]; //pierwszy wymiar tablicy
for(var j=0;TDobj=TRobj.getElementsByTagName('td')[j];j++)
{
c[i][j]=TDobj.innerHTML; /*lub firstChild.data zamiast innerHTML*/;
}
}
/*po zmiennej numer poznaje kolumne ktora ma sortowac */
/*zmienna znak natomiast powoduje ze sortowanie moze byc ascending lub descending */
c.sort( function (a,B){ return Sprawdz(a[numer],b[numer]) ? Obiekt.znak : (-Obiekt.znak) } );
//sortowanie za pomoca zdefiniowanej funkcji
for(var i=0,TRobj;TRobj=TBODYobj.getElementsByTagName('tr')[i];i++)
{
for(var j=0;TDobj=TRobj.getElementsByTagName('td')[j];)
{
TDobj.innerHTML=c[i][j++]; /*lub firstChild.data zamiast innerHTML*/;
}
}
}
/* Uwaga Stosujac InnerHTML mozna spowodowac bledy w niektorych przegladarkach internetowych */
function Sprawdz(x,y) //funkcja sprawdzajaca czy element X ma byc nad elementem Y
{
var r=/^[0-9\.]+$/i;
var HTMLreg=/<.*?>/i;
//-----usuwa kod HTML ze srodka tagow aby nie zaburzal sortowania
x+=''; y+='';
x=x.replace(HTMLreg,'');
y=y.replace(HTMLreg,'');
//--- bierze pod uwage tylko znaki alfabetu i cyfry przy sortowaniu
if(x.match && y.match) //sortowanie liczb
{
//document.write(x+' '+y);
if(parseFloat(x)>parseFloat(y)) return true;
else return false;
}
// sortowanie znakow
if (x>y) return true;
else return false;
}
A w tabeli w komórce gdzie ma być aktywna zmiana wartości trzeba nadać class="zmiana"
Proste
Ten post edytował Barcelona 12.01.2012, 20:13:18