Hi,
ich weiß, dass dies dämlich klingt, aber 3 meiner RegExps werden einfach entweder ignoriert oder falsch interpretiert.
Am Anfang dachte ich, der WIE will mich wiedermal auf'n Arm nehmen, doch nachdem ich's im MZFF auch getestet hab (mit dem gleichen Ergebnis), bin ich am "verzwiebeln". Ich probier schon ewig dran herum, doch funzn tut's trotzdem nicht.
Es geht in meinem Script darum, dass ich eine JS-manipulierte Textarea mit der Größe automatisch an den darin liegenden Text anpasst.
Dabei dividiere ich die Textlänge durch 60 (Maximalzeichenanzahl bei Textarea mit IE-Geisterscrollbalken pro Zeile bei meiner Breite). Das dann mal 14 (Zeilenhöhe) plus 28 Spatze.
Das einzige Problem sind Zeilenumbrüche. Denn diese verbrauchen ja nach einer vollen Zeile keinen Platz, aber in einer Zeile mit nur wenig Zeichen viel Platz (halt die Restzeile). Da hab ich mir etwas einfallen gelassen, doch da liegt ja der Hund begraben.
Jetzt hab ich zu Testzwecken das Script leicht umgebaut, damit man die Vorgänge mitverfolgen kann.
Funktion:
function addZeile() {
var sechzig = ' '; //Um später Zeilenumbrüche mit der richtigen Anzahl von Leerenzeichen ersetzten zu können.
var Inhalt = eingabe.value.replace(/\n\n/g,sechzig+sechzig); // Funzt ned.
Inhalt1 = Inhalt.replace(/(\n| )(.{41,60}?)\n/g,'$1$2'+sechzig.slice(5)); //Funzt nicht.
Inhalt2 = Inhalt1.replace(/(\n| )(.{21,40}?)\n/g,'$1$2'+sechzig.slice(25)); //Funzt nicht.
Inhalt3 = Inhalt2.replace(/(\n| )(.{1,20}?)\n/g,'$1$2'+sechzig.slice(45)); // Auch nicht.
Inhalt4 = Inhalt3.replace(/\n/g,sechzig.slice(5)); //Das funzt wieder.
Zaehl+=1; //Counter, der am Anfang auf 0 steht, wird erhöht.
if(!(Zaehl % 8)) //Jedes 8. mal wird der Zwischenstand ausgegeben
alert(Inhalt.replace(/ /g,':').replace(/\n/g,'(((((((() ERRRRORRRR ())))))') + '\n\n\n\n'+Inhalt1.replace(/ /g,':').replace(/\n/g,'(((((((() ERRRRORRRR ())))))') + '\n\n\n\n\n\n'+Inhalt2.replace(/ /g,':').replace(/\n/g,'(((((((() ERRRRORRRR ())))))') + '\n\n\n\n\n\n'+Inhalt3.replace(/ /g,':').replace(/\n/g,'(((((((() ERRRRORRRR ())))))') + '\n\n\n\n\n\n'+Inhalt4.replace(/ /g,':').replace(/\n/g,'(((((((() ERRRRORRRR ())))))') + '\n\n\n\n\n\n');
eingabe.style.height = (Inhalt4.length / 60 * 14 + 28)+'px'; //Höhe wird angewendet.
}
Aufruf:
<... onkeydown="setTimeout('addZeile()',10)" ...>
Verbesserungsvorschläge am Script sind herzlich willkommen; das Problem ist mir jedoch natürlich wichtiger als der "Feinschliff".
Thx im Vorraus;
Nihtan.