Autor Zpráva
Anonymní
Profil *
Dobrý den chci se zeptat pomocí javascriptu se mi vkládají data do dokumentu. Jde mi to to funkce vymadData smaze vsechen text, který se tam pomocí vypisText vloží. Bohužel nevím jak správně napsat, když tam bude vložených 20 řádků typu:
<p>radek20</p>
<p>radek19</p>
.. atd
<p>radek1</p>


nový text se vždycky přidává před poslední přidane, aby to bylo vidět vždy nahoře
a nevím jak udělat když přijde 21 <p>neco</p>, aby se to první smazalo..
aby bylo na obrazovce vidět vždy jen 20 posledních řádků. starší se mazali

zde kody na smazani a vypis:
function vypisText(txt) {
	vystup.innerHTML = txt+vystup.innerHTML;
}

function vymazData() {
	// v jednoduchem cyklu smazeme vsechny elementy v prvku vystup
	while(vystup.hasChildNodes()) vystup.removeChild(vystup.childNodes[0]);
	return false;
}


zkoušel jsem něco jako:
  while(vystup.hasChildNodes()) vystup.removeChild(vystup.childNodes[20+]);

ale to asi nějak nejde :-(
díky za rady s javascriptem moc neumím jen základy a tohle mi trochu neleze do hlavy
DJ Miky
Profil
Pokud vkládáš vždy jen jeden <p> najednou, tak stačí vždy smazat childNodes[20] (= 21. potomka), protože víc jich tam mít nebudeš...
Pinqui
Profil
ne právě že se může přidat jedním vypisText třbe jeden takto:

vypisText('<p>nejaky text</p>');

ale také více:

vypisText('<p>nejaky text</p>
<p>dalsi text</p>
<p>nejaky text</p>
<p>ahoj</p>
<p>cokoliv</p>
');
Chamurappi
Profil
Reaguji na Pinqui:
ale také více:
>
vypisText('<p>nejaky text</p>
<p>dalsi text</p>
<p>nejaky text</p>
<p>ahoj</p>
<p>cokoliv</p>
');

To ti takhle nemůže fungovat, neescapované odřádkování v řetězci je syntaktická chyba.

Chceš-li mazat 21. potomka, dokud nějaký 21. potomek existuje, je smyčka snadná:
while(vystup.childNodes[20]) vystup.removeChild(vystup.childNodes[20]);
bohyn
Profil
while(vystup.hasChildNodes() && vystup.childNodes.length > 19) { 
  vystup.removeChild(vystup.childNodes[20]);
}
Pinqui
Profil
píšemi to chybu:
uncaught exception: [Exception... "Component returned failure code: 0x80004003 (NS_ERROR_INVALID_POINTER) [nsIDOMHTMLDivElement.removeChild]" nsresult: "0x80004003 (NS_ERROR_INVALID_POINTER)" location: "JS frame :: http://superpokec.cz/try/?rid=22348 :: vypisText :: line 32" data: no]
AM_
Profil
bohynův příklad je špatně. V případě, že délka je 20 (tedy splněna podmínka >19), existují elementy 0..19 a při smazání elementu s indexem 20 musí nastat chyba. Chamurappi to psal správně. Nebo si jen tu 19 přepiš na 20 ;)
Pinqui
Profil
A co s těmi neescapované odřádkování v řetězci köd mám:
function dolly($room = '',$id = '') {
    $db = MyDB::_();
    $text ='';
    if(!empty($id)){
    $query = $db->query("select * from {$room}_text where id > '$id' order by id ASC");
    if ($query->num_rows != 0) {
    while($sel = $query->fetch_assoc()){
      $text .="{$sel['od']}: {$sel['text']}</p>"; 
      $last = $sel['id'];
    }
    }else $last = $id;
    }
    return "repeat('script','$last'); vypisText('$text');";
}


to mi jde do té funkce vypisText
Pinqui
Profil
Když totiž zadám:
$text .="<p>{$sel['od']}: {$sel['text']}</p>\n"; 

tak mi to hodí chybu...


A ještě by mě zajímalo, každej výpis textu bude začínat jménem.. například:



Jarda: Simi: mám se fajn

Pepa: Jarda: ahoj

Jarda: ahoj česky :-D

Simi: jak se máš?

Jarda: hello

Jestli jde, když bych chtěl vymazat všechny texty od Jarda, tak jak to udělat?? Jestli nějako přez split textu nebo jinak? Aby mi to nesmazalo i to kdo píše jardoj..

Díky předem. V php a mysql to není těžké, tam to smáznu z mysql a je to, ale s javascriptem moc neumím tak věřím v to že se tu najde někdo kdo umí js dobře a poradí. Jinak díky všem co už pomohli

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: