Tabelka
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
