john.brown Posted June 7, 2006 Report Share Posted June 7, 2006 Ir šitāds, par piemēru, kodiņš: <html> <head> <script type="text/javascript"> function changeContent() { var newContent = '<tr><td>Content changed</td><td>uhu</td></tr>'; document.getElementById('row').innerHTML = newContent; } </script> </head> <body> <table width="50%" border="1"> <tBody id="row"> <tr> <td>init content</td> <td>more content</td> </tr> </tBody> </table> <a href="#" onClick="changeContent()">change</a> </body> </html> Iekš FF, pēc klikšķa uz linku, viss nomainās. A IE saka "unknown runtime error" :( Kāds, varbūt zin, kā to pašu izdarīt, lai abi saprastu, ko no viņiem gribu? Link to comment Share on other sites More sharing options...
v3rb0 Posted June 7, 2006 Report Share Posted June 7, 2006 brutāli daries ar to innerHTML. pirmais piemērs, kas googlē izkrita- http://www.howtocreate.co.uk/tutorials/javascript/domtables Link to comment Share on other sites More sharing options...
john.brown Posted June 7, 2006 Author Report Share Posted June 7, 2006 (edited) Tad tu gribi teikt, ka iekš IE es tā vienkārši ar innerHTML nemaz nevaru tBody saturu nomainīt, tik katram cellam atsevišķi? Tas ellīgi sarežģī dzīvi :( Jā, nevaru. read only... Edited June 7, 2006 by john.brown Link to comment Share on other sites More sharing options...
Delfins Posted June 7, 2006 Report Share Posted June 7, 2006 A kā tu domā, kā ir labāk, kad taisa operāciju - uzreiz brutāli ar lomiku, vai vispirms smuki uzgriež, atsūc asins un tad darbojās... Link to comment Share on other sites More sharing options...
john.brown Posted June 7, 2006 Author Report Share Posted June 7, 2006 (edited) Dotajā gadījumā - brutāli ar lomiku, jo citādi atsūc asinis tik programmerim. Tā vietā, lai smuki nomainītu rindu tabulā, man tagad jādomā, kā padot tam visam ēdamā izskatā to jauno kontentu, kā saglabāt veco kontentu (ja pēkšņi atpakaļ ielikt vajag) un jāraksta kaut kāds hemorojs, lai izpārsētu tās rindas lauciņus... JS kā parasti atšķiras ar debīlismu :( Vienmēr esmu bijis pārliecināts, ka tie, kas raksta ko lielāku par popup iekš JS, ir mazohisti... šitas tik apstiprina šo domu. Skrobe, ka iekš FF viss forši notiek, tagad žēl atteikties no idejas - smuka :) Edited June 7, 2006 by john.brown Link to comment Share on other sites More sharing options...
bubu Posted June 7, 2006 Report Share Posted June 7, 2006 Nu nez.. JSā operēt ar DOM fjām nav grūti. Javā jau ar cilvēki ar to dara, un nesūdzās. Sāksi xml failus parsēt/apstrādāt kautvai php arī nāksies DOM saprast. Man JS šķiet ļoti interesanta valoda. Tur daudz fiškas var interesanti uztaisīt, ne kā citās valodās, kur jāmokās. Tas, ka tu to nezini, nenozīmē, ja JS sux un punkts. Jaunu valodu mācoties, kas atšķirās no iepriekš zināmajām, vienmēr nākas pakustināt pelēkās šūniņas. A pēc tam jau kā smērēts ies. Link to comment Share on other sites More sharing options...
john.brown Posted June 7, 2006 Author Report Share Posted June 7, 2006 (edited) Var, jau var, piekrītu. Un pati par sevi ar būtu jauka, tik diemžēl vairumā gadījumu nākas mocīties ar savietojamību. Ja uzskatītu, ka sux, tad neko iekš viņas nedarītu :) Tak reizēm viņi, imho, sarežģī vienkāršas lietas... Nu, bet tas jau off :) Ir tak atšķirība starp divām rindiņām pirmajā variantā, un šito penteri: function changeContent() { newContent = new String('Content changed|uhu'); values = newContent.split('|'); // create new table row newTr = document.createElement('tr'); // get cells count of response var count = values.length; // create cells for(i = 0;i < count;i++) { td = document.createElement('td'); td.innerHTML = values[i]; newTr.appendChild(td); } tr = document.getElementById('row'); tr.replaceNode(newTr); } Varbūt kāds zin, kā es no html`a rindas '<tr><td>Content changed</td><td>uhu</td></tr>' varu vienkārši uzreiz tās node dabūt? Edited June 7, 2006 by john.brown Link to comment Share on other sites More sharing options...
bubu Posted June 8, 2006 Report Share Posted June 8, 2006 Pieliec unikālu id atribūtu. Un tad document.getElementById(..), ja tas bij tas, ko domāji. Link to comment Share on other sites More sharing options...
Delfins Posted June 8, 2006 Report Share Posted June 8, 2006 Kā strādāt ar celliem iekš table skaties piemērus ar table JS-sortēšanu... Bet ja vajag nomainīt TD saturu, ar ID pietiek.. nevis visu Body nooperēt.. Link to comment Share on other sites More sharing options...
john.brown Posted June 8, 2006 Author Report Share Posted June 8, 2006 Jūs īsti nesapratāt :) Pirmkārt, man vajag nomainīt tr saturu, ko var izdarīt tik nomainot visu viņa td saturu. Tam tr jau ir identifikators, un kā tikt pie tiem celliem es labi saprotu. Tak tas, uz ko nomainīt, nāk pa ajax, kā html strings'<tr><td>...</td></tr>'. Mani interesē, vai varu es to responses stringu uzreiz pārtaisīt par nodes objektu, tipa, newTrNode = DomParser.parseFromString(response).getNode('tr'). Tas variants ar split nav smuks, jo tad krietns gabals php vēl jāpāraksta, un vispār dom modelis kļūst lieks :). Izraku googli, tak nekā sakarīga un saprotama diemžēl neatradu. Plz, ja kāds zina, kā to izdarīt, lai strādātu iekš IE un FF, padalaties ar zināšanām... Link to comment Share on other sites More sharing options...
v3rb0 Posted June 8, 2006 Report Share Posted June 8, 2006 atrodi row kuru nomainīt, iznīde šim visus chaildus, sataisi jaunas celles, saliec tās par row chaildiem. no js laikam viss ko vajag ir - getElementById(), removeChild(), createElement(), appendChild() + pāris ifi un kāds cikls varbūt. Link to comment Share on other sites More sharing options...
Delfins Posted June 8, 2006 Report Share Posted June 8, 2006 (edited) Tad izrādās tu to html kluci pa ajax atstiep... A cik celles? Ja tur ir tikai 2 celles, tad imho AJAX var atgriezt JS kodu (vismaz es tā daru lukapiem) Vēlāk, līdzīgi, kā PHP: JS: eval(jsCodeResponce); for ( row ... ) { var newTR = ... for ( cell () ) { var newTD = ... tavs_dinamisks_array[row][cell]; .... } } // if OK - returns FALSE & executes RPC!! function sendRPC( xmlDoc, queryString ) { if (!xmlDoc) return true; if (xmlDoc && xmlDoc.readyState != 0) { xmlDoc.abort(); } xmlDoc.open( "GET", queryString, true ); xmlDoc.onreadystatechange = function () { if (xmlDoc.readyState == 4 && xmlDoc.responseText) { try { eval(xmlDoc.responseText); } catch(e) { //prompt('RPC-URL',queryString); alert(e+"\n"+xmlDoc.responseText); } } }; // virt-func-end xmlDoc.send(null); return false; } PHP ģenerē JS-kodu, kas tiek pa XML-callbacku atstiepts un evalēts() JS kods: var mans_krutais_masivs = new Array(...); izsaucu_JS_client_funkciju_no_PHP(); PS: tici man, tas viss strādā smuki un ātri :) Edited June 8, 2006 by Delfins Link to comment Share on other sites More sharing options...
john.brown Posted June 8, 2006 Author Report Share Posted June 8, 2006 Tas html klucis ir no 2 līdz 12 cellēm. Ļoti negribētos ko mainīt php galā - tas nozīmē diezgan lielu darba apjomu. Rokoties pa googli, radās iespaids, ka ir kaut kāds veids, kā to html izpārsēt pa dom dokumentu klienta galā. Tak, kā parasti ar javaskript, jēdzīgas dokumentācijas nav :( Skaidrs tik, ka risinājums ir platform atkarīgs... Link to comment Share on other sites More sharing options...
Delfins Posted June 8, 2006 Report Share Posted June 8, 2006 (edited) Skaidrs tik, ka risinājums ir platform atkarīgs... totāls gada buļļkaks Edited June 8, 2006 by Delfins Link to comment Share on other sites More sharing options...
bubu Posted June 8, 2006 Report Share Posted June 8, 2006 Kā saprast nav jēdzīgas dokumentācijas?? Ir un ļoti jēdzīgas. Paskaties manā satura rādītājā pie JS. Link to comment Share on other sites More sharing options...
Recommended Posts