я думаю будет поизящнее вот так:
function resizeTextArea(node) {
var textArea = document.getElementById(node.id);
var div = document.getElementById('hiddendiv');
if (!div) {
div = document.createElement('div');
document.body.appendChild(div);
div.id = 'hiddendiv';
var fontFamily = style(textArea).fontFamily
var fontSize = style(textArea).fontSize;
var width = style(textArea).width;
div.setAttribute('style', 'font-family:'+fontFamily+'; '+' font-size:'+fontSize+'; '+' width:'+width+'; '+' visibility: hidden; '+' position:absolute;' + 'top:0;');
}
div.innerHTML = textArea.value.replace(/\n/g,'<br/>');
var fontSize = style(div).fontSize.substr(0,2);
textArea.style.height = div.clientHeight + parseInt(fontSize) + 'px';
textArea.style.overflow = 'hidden';
}
<textarea class="textAreaChangeComm" id="txt" onKeyUp="resizeTextArea(this)">'+txt+'</textarea>
так как к <textarea> может быть подключен стиль (class="textAreaChangeComm")
function style( elem ) {
if ( elem.ownerDocument && elem.ownerDocument.defaultView ) {
return elem.ownerDocument.defaultView.getComputedStyle( elem, null );
} else if ( elem.currentStyle ) {
return elem.currentStyle;
}
return null;
}