Jump to content
php.lv forumi

tabulas rindas nomainīšana ar js


Recommended Posts

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

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
Link to comment
Share on other sites

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

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
Link to comment
Share on other sites

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

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

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
Link to comment
Share on other sites

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

×
×
  • Create New...