Jump to content
php.lv forumi

Recommended Posts

Posted

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?

Posted (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 by john.brown
Posted

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

Posted (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 by john.brown
Posted

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.

Posted (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 by john.brown
Posted

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

Posted

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

Posted

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.

Posted (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 by Delfins
Posted

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

Posted

Kā saprast nav jēdzīgas dokumentācijas?? Ir un ļoti jēdzīgas. Paskaties manā satura rādītājā pie JS.

×
×
  • Create New...