Javascript 到 jquery 多个文本区域大小

Javascript to jquery multiple textarea size

我在这里 http://jsfiddle.net/2UDdh/43/light 找到了一个问题的解决方案,但我正在尝试将其调整为 jquery 因为我想稍后使用 .each() 和“this”,因为我有多个来自 db 的不同 id 的 textarea。

    var textContainer, textareaSize, input;
var autoSize = function() {
  textareaSize.innerHTML = input.value + '\n';
};

document.addEventListener('DOMContentLoaded', function() {
  textContainer = document.querySelector('.textarea-container');
  textareaSize = textContainer.querySelector('.textarea-size');
  input = textContainer.querySelector('textarea');

  autoSize();
  input.addEventListener('input', autoSize);
});

可能您正在寻找这个。但我建议您自己尝试一下,以便更好地理解。

var textContainer, textareaSize, input;

var autoSize = function () {
  textareaSize.html(input.val() + '\n') ;
};
$(document).ready(function(){
    textContainer = $('.textarea-container');
  textareaSize = $('.textarea-size');
  input = $('textarea');
  autoSize();
  input.on('input',autoSize);

})
.textarea-container {
  position: relative;
  width: 50%;
}

textarea, .textarea-size {
  min-height: 25px;
  font-family: sans-serif;
  font-size: 14px;
  box-sizing: border-box;
  padding: 4px;
  border: 1px solid;
  overflow: hidden;
  width: 100%;
}

textarea {
  height: 100%;
  position: absolute;
  resize:none;
  white-space: normal;
}

.textarea-size {
  visibility: hidden;
  white-space: pre-wrap;
  word-wrap: break-word;
  overflow-wrap: break-word;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="textarea-container">
  <textarea></textarea>
  <div class="textarea-size"></div>
</div>

如果你真的想使用 jQuery,你可以创建一个 jQuery 插件。

您实际上是在向不可见的 <div> 添加换行符以控制换行 <textarea>.

的大小

/* jquery.textarea-resizer.js */
(function($) {
  var autoSize = function(input, textareaSize) {
    $(textareaSize).html($(input).val() + '\n');
  };
  var initResizer = function(target) {
    if (!$(target).data('resizer-active')) {
      var textareaSize = $(target).find('.textarea-size');
      var input = $(target).find('textarea');
      autoSize(input, textareaSize);
      $(input).on('input', function(e) {
        autoSize(e.target, textareaSize);
      });
      $(target).data('resizer-active', true); // Initialize only once
    }
  }
  $.fn.textareaResizer = function() {
    this.each(function() {
      initResizer(this);
    });
  }
})(jQuery);

$('.textarea-container').textareaResizer(); // Initialize all 3 at once!
.textarea-container {
  position: relative;
  width: 50%;
}

.textarea-container textarea,
.textarea-container .textarea-size {
  min-height: 25px;
  font-family: sans-serif;
  font-size: 14px;
  box-sizing: border-box;
  padding: 4px;
  border: 1px solid;
  overflow: hidden;
  width: 100%;
}

.textarea-container textarea {
  height: 100%;
  position: absolute;
  resize: none;
  white-space: normal;
}

.textarea-container .textarea-size {
  visibility: hidden;
  white-space: pre-wrap;
  word-wrap: break-word;
  overflow-wrap: break-word;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div class="textarea-container">
  <textarea></textarea>
  <div class="textarea-size"></div>
</div>

<div class="textarea-container">
  <textarea></textarea>
  <div class="textarea-size"></div>
</div>

<div class="textarea-container">
  <textarea></textarea>
  <div class="textarea-size"></div>
</div>