<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>/home/antu &#187; Wörterzählern</title>
	<atom:link href="http://www.antusblog.de/tag/worterzahlern/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.antusblog.de</link>
	<description>Linux, Programmierung und andere Dinge die mich interessieren</description>
	<lastBuildDate>Mon, 26 Oct 2009 06:00:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Ein einfacher Buchstaben- und Wörterzähler</title>
		<link>http://www.antusblog.de/2009/06/18/ein-einfacher-buchstaben-und-worterzahler/</link>
		<comments>http://www.antusblog.de/2009/06/18/ein-einfacher-buchstaben-und-worterzahler/#comments</comments>
		<pubDate>Thu, 18 Jun 2009 16:47:46 +0000</pubDate>
		<dc:creator>Antu</dc:creator>
				<category><![CDATA[Java Script]]></category>
		<category><![CDATA[Buchstabe]]></category>
		<category><![CDATA[Buchstabenzähler]]></category>
		<category><![CDATA[Wort]]></category>
		<category><![CDATA[Wörterzählern]]></category>
		<category><![CDATA[Zeichen]]></category>
		<category><![CDATA[Zeichenzähler]]></category>

		<guid isPermaLink="false">http://www.antusblog.de/?p=1555</guid>
		<description><![CDATA[Ein Wörter- bzw. Buchstabenzähler kann für den Benutzer von großem Nutzen sein. Wenn ihm (z.B. aus technischen Gründen) nur eine bestimmte Anzahl von Zeichen zur Verfügung stehen, sieht er bereits bei der Eingabe, wie viele Zeichen er noch schreiben kann. Beim Verfassen längerer Texte ist ein Wörterzähler hilfreich, denn so kann der Benutzer ungefähr abschätzen [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.antusblog.de/wp-content/uploads/2009/06/Buchstabenzaehler.Woerterzaehler.Javascript.png"><img class="aligncenter size-full wp-image-1559" title="Buchstabenzaehler.Woerterzaehler.Javascript" src="http://www.antusblog.de/wp-content/uploads/2009/06/Buchstabenzaehler.Woerterzaehler.Javascript.png" alt="Buchstabenzaehler.Woerterzaehler.Javascript" width="528" height="336" /></a>Ein Wörter- bzw. Buchstabenzähler kann für den Benutzer von großem Nutzen sein. Wenn ihm (z.B. aus technischen Gründen) nur eine bestimmte Anzahl von Zeichen zur Verfügung stehen, sieht er bereits bei der Eingabe, wie viele Zeichen er noch schreiben kann. Beim Verfassen längerer Texte ist ein Wörterzähler hilfreich, denn so kann der Benutzer ungefähr abschätzen wie lang sein Text bereits ist.</p>
<ul>
<li>Beim Schreiben von Kurznachrichten (SMS) ist die maximale Anzahl von Zeichen begrenzt. Bei privaten Nachrichten in Foren, oder Kontaktformularen gibt es oft ähnliche Begrenzungen. Hier ist eine Anzeige der noch verfügbaren Zeichen sinnvoll.</li>
<li>Eine Anzeige der Wortzahl ist beispielsweise für einen Redakteur oder Blogger nützlich, denn so sieht er ob er seinen Text vielleicht etwas kürzen, oder noch etwas mehr schreiben sollte.</li>
</ul>
<p>In diesem Artikel stelle ich einen einfachen <strong>Buchstabenzähler</strong> bzw. <strong>Wörterzähler</strong> in Form einer Java Script-Klasse vor, und erkläre seine Funktionsweise.<span id="more-1555"></span></p>
<h2>Der Wörter- bzw. Buchstabenzähler</h2>
<p>Die Zählerklasse ist in der Lage die Wörter und Buchstaben in einem Eingabefeld zu zählen. Außerdem können Angaben zur maximalen Anzahl von Zeichen/Wörtern gemacht werden, zusätzlich kann eine Funktion angegeben werden, welche beim Überschreiten der maximalen Anzahl aufgerufen wird.</p>
<p style="padding-left: 30px;"><a href="http://www.antusblog.de/downloads/eingabenzaehler/EingabenZaehlen.js">Die Zählerklasse</a><br />
<a href="/demos/4-eingabenzaehler/woerterzaehler.html">Beispielseite (Texteingabe mit Wörter- und Zeichenzähler)</a></p>
<h3>Benutzung der Klasse</h3>
<p>Beim Erstellen der Klasse wird die ID des Eingabeelementes angegeben, dessen Inhalt ausgewertet werden soll. Sobald eine der Zählerfunktionen aufgerufen wird, bindet die Klasse die Funktion zum Zählen der Zeichen bzw. die zum Zählen der Wörter an die <code>onchange</code>- und <code>onkeyup</code>-Ereignisse. Bei jeder Veränderung des Textes wird neu gezählt und die Anzeige aktualisiert.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">// Wenn der Zähler sofort loszählen soll, kann er einfach beim onload-</span>
<span style="color: #006600; font-style: italic;">// Ereignis initialisiert werden.</span>
window.<span style="color: #000066;">onload</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #006600; font-style: italic;">// Wörter- und Buchstabenzähler initialisieren</span>
	<span style="color: #006600; font-style: italic;">// 'text' ist die ID des Eingabefeldes</span>
	<span style="color: #003366; font-weight: bold;">var</span> eingabenzaehler <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> EingabenZaehler<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'text'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #006600; font-style: italic;">// Maximale Anzahl an Buchstaben festlegen. (450)</span>
	<span style="color: #006600; font-style: italic;">// 'bmax' ist die ID des Elements, in dem die maximale Anzahl von </span>
	<span style="color: #006600; font-style: italic;">// Buchstaben angezeigt wird. text_einfaerben ist die Funktion, </span>
	<span style="color: #006600; font-style: italic;">// die beim Überschreiten der max. Anzahl aufgerufen wird</span>
	eingabenzaehler.<span style="color: #660066;">maxBuchstaben</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">450</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'bmax'</span><span style="color: #339933;">,</span> text_einfaerben<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #006600; font-style: italic;">// Diese Funktion hat auch noch einen vierten, optionalen Parameter,</span>
	<span style="color: #006600; font-style: italic;">// der festlegt, wie lang ein Wort maximal sein darf. Ab dieser Zahl wird es</span>
	<span style="color: #006600; font-style: italic;">// als mehrere Wörter gezählt. Die Voreinstellung ist 50. Ein Wort aus 153</span>
	<span style="color: #006600; font-style: italic;">// Zeichen würde also als 3 Wörter gezählt werden.</span>
&nbsp;
	<span style="color: #006600; font-style: italic;">// Man könnte auch eine max. Anzahl Wörter festlegen.</span>
	<span style="color: #006600; font-style: italic;">// eingabenzaehler.maxWoerter(100, 'wmax', max_woerter);</span>
&nbsp;
	<span style="color: #006600; font-style: italic;">// Wörterzähler aktivieren, 'wz' ist die ID des Elements in dem</span>
	<span style="color: #006600; font-style: italic;">// die Anzahl der Wörter angezeigt wird.</span>
	eingabenzaehler.<span style="color: #660066;">woerterZaehler</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'wz'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #006600; font-style: italic;">// Buchstabenzähler aktivieren, 'bz' ist die ID des Elements in dem</span>
	<span style="color: #006600; font-style: italic;">// die Anzahl der Buchstaben angezeigt wird.</span>
	eingabenzaehler.<span style="color: #660066;">buchstabenZaehler</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'bz'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Die beim Erreichen der maximalen Zeichen/Wort-Anzahl aufgerufene Funktion muss einen Parameter annehmen, welcher angibt ob die max. Anzahl überschritten wurde. Wenn die max. Anzahl überschritten wurde, wird <code>true</code> als 1. Parameter mitgeliefert, ansonsten <code>false</code>. Die Funktion könnte beispielsweise so aussehen:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> text_einfaerben<span style="color: #009900;">&#40;</span>drueber<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #006600; font-style: italic;">// Variablen initialisieren (beim ersten Aufruf)</span>
	<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">typeof</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">geaendert</span> <span style="color: #339933;">==</span> <span style="color: #3366CC;">'undefined'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">geaendert</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
		<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">alteFarbe</span> <span style="color: #339933;">=</span> document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'warnung'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">style</span>.<span style="color: #660066;">color</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #006600; font-style: italic;">// max. Anzahl überschritten, färbe Text rot ein.</span>
	<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>drueber <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">geaendert</span> <span style="color: #339933;">===</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">geaendert</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">;</span>
		document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'warnung'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">style</span>.<span style="color: #660066;">color</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">'red'</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #006600; font-style: italic;">// max. Anzahl nicht oder nicht mehr überschritten, normale Farbe.</span>
	<span style="color: #000066; font-weight: bold;">else</span> <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>drueber <span style="color: #339933;">===</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">geaendert</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
		document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'warnung'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">style</span>.<span style="color: #660066;">color</span> <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">alteFarbe</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<h3>Funktionsweise</h3>
<p>Das Zählen der Zeichen in einem Eingabefeld gestaltet sich ziemlich einfach. Jedes Text-Eingabefeld hat die Eigenschaft <code>value</code>, in der der eingegebene Text enthalten ist. Diese Eigenschaft hat wiederum die Eigenschaft <code>length</code>, die angibt wie viele Zeichen der Text enthält.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">anzahl <span style="color: #339933;">=</span> eingabefeld.<span style="color: #660066;">value</span>.<span style="color: #660066;">length</span><span style="color: #339933;">;</span></pre></div></div>

<p>Herauszufinden, aus wie vielen Wörtern ein Text besteht, ist hingegen schon schwieriger. Es genügt nicht, einfach alle Leerzeichen zu zählen, denn so würden mehrere Leerzeichen auch als mehrere Wörter gezählt werden. Außerdem gibt es noch andere Zeichen, mit denen Wörter getrennt werden können, beispielsweise Tabulatoren, Zeilenumbrüche oder Kommata. </p>
<p>Die Klasse geht zum Zählen der Wörter den gesamten Text Zeichen für Zeichen durch, und merkt sich mittels der Variable <code>imwort</code> ob der Zeiger sich gerade in einem Wort befindet, oder nicht. Immer wenn ein Zeichen kommt, welches kein Teil eines Wortes ist (Leerzeichen, Zeilenumbruch, Komma, Punkt, etc.) wird die Anzahl der Wörter um eins erhöht und die Variable <code>imwort</code> zurückgesetzt. Die <code>imwort</code>-Variable wird gleichzeitig dazu verwendet die Länge eines Wortes zu erfahren, so dass sehr lange Wörter als mehrere Wörter gezählt werden. </p>
<p>Eine Funktion, die es verhindert, das der Benutzer weiterschreibt, wenn die max. Wort/Zeichen-Anzahl erreicht ist hat die Klasse ebenfalls nicht. Solche Funktionen behindern den Benutzer nur, und können ohnehin leicht umgangen werden. Solche Funktionen verhindern, dass der Benutzer seinen Text erst einmal zu Ende schreibt, und dann guckt, was er weglassen kann, um die Begrenzung einzuhalten. </p>
<h4>Verbesserungsmöglichkeiten</h4>
<p>Bei jeder Veränderung, und jedem neuen Zeichen zählt die Klasse neu, bei längeren Texten und älteren Rechnern kann das die Ausführung ziemlich verlangsamen. Man könnte die Klasse aber einfach so umschreiben, das nur alle X Sekunden neu gezählt wird, und nicht bei jeder Veränderung.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.antusblog.de/2009/06/18/ein-einfacher-buchstaben-und-worterzahler/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

