JavaScript - vkladanie HTML znaciek

Programovacie jazyky, rady, poradňa...
"J"
Medium Professional
Medium Professional
Používateľov profilový obrázok
Príspevky: 1019
Registrovaný: 13 mar 2007, 17:10

JavaScript - vkladanie HTML znaciek

Príspevok od používateľa "J" »

Takze potrebujem spravit takyto skript: mam textareu a pri nej niekolko <input type=button>. Po kliknuti na lubovolny z nich by sa mala do textarei vlozit otvaracia znacka (napriklad <strong>), po kliknuti druhy raz zasa uzatvaracia znacka (napriklad </strong>).
Skusal som to riesit takto: vytvoril som si fciu html(), ktora ma parameter nazovtagu. Mam pole opened_tags, kde je zoznam vsetkych otvorenych znaciek (defaultne je pole prazdne). Po vyvolani tejto fcie (na kazdom buttone mam onclick="html('nazovtagu')") by sa mala do textarei vlozit otvaracia znacka, ak dany tag nie je v poli opened_tags, alebo uzatvaracia znacka, pokial to v poli je. Pritomnost prvku v poli testujem pomocou fcie array_search, ktoru som nasiel kdesi na internete.
Problem je ten, ze mi to stale vklada len otvaracie znacky, a tiez by som potreboval, pokial je uz vlozena aj uzatvaracia znacka, odstranit tuto znacku z pola opened_tags, to uz absolutne netusim :(
prikladam kod, snad mi niekto pomoze. vopred dik.

Kód: Vybrať všetko

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
		<title></title>
		<script type="text/javascript">
		function array_search(val,array)
			{
			for (var i = 0; i < array.length; i++)
				{
				if (array[i] == val) 
				{
				return i;
				}
			}
			return false;
			}
		function html(tag)
			{
			var opened_tags=new Array();
			var textarea=document.getElementById('textarea');
				if (array_search(tag, opened_tags))
					{
					textarea.focus();
					textarea.value=textarea.value+'</'+tag+'>';
					}
				else
					{
					textarea.focus();
					textarea.value=textarea.value+'<'+tag+'>';
					opened_tags.push(tag);
					}
			}
		</script>
	</head>
	<body>
		<div>
			<input type="button" value="strong" onclick="html('strong')">
			<input type="button" value="em" onclick="html('em')">
			<input type="button" value="ins" onclick="html('ins')">
			<input type="button" value="del" onclick="html('del')">
			<input type="button" value="q" onclick="html('q')">
			<input type="button" value="code" onclick="html('code')">
			<input type="button" value="ul" onclick="html('ul')">
			<input type="button" value="li" onclick="html('li')">
		</div>
		<textarea id="textarea" cols=50 rows=15></textarea>
	</body>
</html>
neutronmind
Expert
Expert
Príspevky: 189
Registrovaný: 05 aug 2008, 14:17

Príspevok od používateľa neutronmind »

Podla mna by bolo vyhodnejsie spravit si nejaku boolean premennu, ktorej hodnota by bola defaultne false a pri kliknuti na prislusny button by sa vykonalo
ak (premenna==false) tak
vypis otvaraciu znacku;
premenna=true;
inak
vypis uzatvaraciu znacku'
premenna=false;

alebo nejakym takmy sposobom. :)
"J"
Medium Professional
Medium Professional
Používateľov profilový obrázok
Príspevky: 1019
Registrovaný: 13 mar 2007, 17:10

Príspevok od používateľa "J" »

Tak som to nakoniec vyriesil - spravil som si fciu na vkladanie otvaracich a na vkladanie uzatvaracich znaciek, plus po 2 buttony, z ktorych ma jeden display: inline a druhy none. Poprosim lock.
Napísať odpoveď