2013-01-07 45 views
1

我有一個非常好的小函數,它可以在屏幕上顯示屏幕上顯示文本大小,如果它們開始溢出時,可以減少文本大小。在使用jQuery輸入時減少TextArea中文本的大小

$(function(){ 
    $('div.Body').each(function (index) { 
     if ($('div.Body')[index].scrollHeight > 150) { 
      $('div.Body')[index].style.fontSize = 'small'; 
      if ($('div.Body')[index].scrollHeight > 150) { 
       $('div.Body')[index].style.fontSize = 'x-small'; 
       if ($('div.Body')[index].scrollHeight > 150) { 
        $('div.Body')[index].style.fontSize = 'xx-small'; 
       } 
      } 
     } 
    }); 
}) 

我想使用相同/相似的功能做的,而用戶鍵入的文本到文本區域時,他們提交的文字相同,但textarea的似乎並不具有scrollHeight屬性的功能:

$(function() { 
    window.status = $('.TextAreaClass').scrollHeight; 
}); 

該函數只返回undefined。

如何在textArea中完成此操作?

+0

_請將'$('div.Body')[index]'保存到一個臨時變量(緩存它)。你在做什麼是非常低效的。或者更好的是,只需使用'this',因爲這將是'$('div.Body')[index]'。 – Cerbrus

回答

0

scrollHeight是一個本地JavaScript方法,而不是一個jQuery的一個,所以你需要做以下,以獲得textareascrollHeight

window.status = $('.TextAreaClass')[0].scrollHeight; 

注意,返回的第一個元素的jQuery對象的[0] ,這是本地DOM元素。另外,你應該真的在當前的代碼中緩存選定的元素,以使其性能更好。試試這個:

$('div.Body').each(function (index) { 
    var div = $('div.Body')[index]; 
    if (div.scrollHeight > 150) { 
     div.style.fontSize = 'small'; 
     if (div.scrollHeight > 150) { 
      div.style.fontSize = 'x-small'; 
      if (div.scrollHeight > 150) { 
       div.style.fontSize = 'xx-small'; 
      } 
     } 
    } 
}); 

最後,該代碼的邏輯似乎有缺陷的,因爲所有的條件都檢查> 150

+1

測試是相同的,因爲它期望前一行已經改變了高度。 –

+0

@dystroy當然!現在它是有意義的:) –

+0

'var div'確定,但你也可以使用'.each(function(index,element)''的第二個參數,你可以訪問'element'而不需要指定元素到每個迭代的變量 – wakooka

1

只需使用this,而不是讓$('div.Body')[index]爲每次循環:

$('div.Body').each(function() { // Remove the redundant parameter 
    if (this.scrollHeight > 150) { 
     this.style.fontSize = 'small'; 
     if (this.scrollHeight > 150) { 
      this.style.fontSize = 'x-small'; 
      if (this.scrollHeight > 150) { 
       this.style.fontSize = 'xx-small'; 
      } 
     } 
    } 
}); 

.eachthis$('div.Body')[index]

而且,像Rory說的那樣,$('.TextAreaClass')返回一個jQuery對象。您可能需要使用$('.TextAreaClass')[0];來訪問該對象中的第一個DOM元素。

+0

在'each()''這個'將引用'$('div.Body')',* not *'$('div.Body')[index]' –

+1

@RoryMcCrossan:運行'$('div')。each(function(){console.log(this)});'我測試了這個代碼,並且看到了所有div的記錄。 – Cerbrus

+0

再次錯誤。 RTFM](http://api.jquery.com/each/#example-0),然後試圖使我的答案失效。或者至少,測試你的聲明。 – Cerbrus