You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用jQuery选择器替代querySelector后textarea自动调整高度功能失效

问题:替换为jQuery对象后,textarea自动高度调整功能失效

你遇到的问题核心是原生DOM元素和jQuery包装对象的区别,我来帮你拆解清楚:

为什么修改后功能失效?

  • document.querySelector('.my-singlep-form-txtarea') 返回的是原生DOM元素对象,它自带scrollHeight这个原生属性,能正确获取文本内容的实际高度。
  • 而$('.my-singlep-form-txtarea') 返回的是jQuery包装对象,这是jQuery对原生元素的封装集合,它本身并没有scrollHeight属性。当你继续用text_area.scrollHeight时,会得到undefined,导致循环的判断条件永远不成立,自然不会执行高度调整的逻辑。

两种修复方案

方案1:从jQuery对象中取出原生DOM元素

直接在jQuery对象后加[0]或者.get(0),拿到集合中的第一个原生元素,这样后续代码可以保持原有逻辑不变:

jQuery(function ($) { 
  let button = "#single_p_submit_btn"; 
  // 取出jQuery集合中的第一个原生DOM元素
  let text_area = $('.my-singlep-form-txtarea')[0]; 
  $(text_area).keydown(function () { 
    $(button).removeClass('my-singlep-btn').addClass('my-singlep-btn-active'); 
    while ($(text_area).outerHeight() < text_area.scrollHeight + parseFloat($(text_area).css("borderTopWidth")) + parseFloat($(text_area).css("borderBottomWidth")) && $(text_area).outerHeight() < 81 ) { 
      $(text_area).height($(text_area).height() + 1); 
    } 
  }); 
});

方案2:全程使用jQuery对象并兼容原生属性

如果想保留text_area作为jQuery对象,需要在用到原生属性时,先取出对应的原生元素:

jQuery(function ($) { 
  let button = "#single_p_submit_btn"; 
  let text_area = $('.my-singlep-form-txtarea'); 
  text_area.keydown(function () { 
    $(button).removeClass('my-singlep-btn').addClass('my-singlep-btn-active'); 
    // 获取原生DOM元素
    const nativeTextArea = text_area[0];
    while (text_area.outerHeight() < nativeTextArea.scrollHeight + parseFloat(text_area.css("borderTopWidth")) + parseFloat(text_area.css("borderBottomWidth")) && text_area.outerHeight() < 81 ) { 
      text_area.height(text_area.height() + 1); 
    } 
  }); 
});

小提示

jQuery对象本质是一个类数组的集合,里面包含了选中的原生DOM元素。当你需要使用原生DOM的属性(比如scrollHeight、value)或方法(比如focus())时,必须先从jQuery对象中取出对应的原生元素才能调用哦。

内容的提问来源于stack exchange,提问作者Chriz74

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:27:34