layui.$已内置精简版jquery 1.12.4,覆盖dom操作、事件绑定、$.ajax等核心功能,需在layui.use回调内调用,避免全局污染与版本冲突;外部强依赖jquery 3.x时须用noconflict(true)隔离。

layui.use 里直接用 layui.$ 就够了
绝大多数场景下,你根本不需要外部 jQuery。Layui 自带的 layui.$(基于 jQuery 1.12.4 的精简版)已覆盖 DOM 选择、事件绑定、$.ajax、表单序列化等核心能力。它不挂载到 window 全局,避免污染,也天然绕开版本冲突。
常见错误是写成:var $ = layui.$ 在 layui.use 外部 —— 此时模块未加载,layui.$ 是 undefined。
- ✅ 正确写法:必须在
layui.use回调内获取 - ✅ 推荐写法:
layui.use(['jquery', 'layer'], function(){ var $ = layui.$, layer = layui.layer; }) - ⚠️ 注意:即使只用了
layer,它内部会自动加载jquery模块,所以layui.$依然可用
非要引入 jQuery 3.x?用 jQuery.noConflict(true) 隔离
如果你的项目强依赖 jQuery 3.x 的新 API(比如 .prop() 行为变更、Promise 化的 $.ajax),又必须共存,就不能让外部 jQuery 覆盖 Layui 内部实例。
Layui 的加载逻辑是:检测到 window.jQuery 存在,就直接赋值 layui.jquery = layui.$ = jQuery —— 这正是冲突源头。
jQuery 1.12.4是jQuery 1.x系列的最后一个正式稳定版本,由jQuery团队于2016年发布。该版本主要面向需要兼容旧版浏览器环境的网站和Web应用,尤其适用于仍需支持Internet Explorer 6、Internet Explorer 7、Internet Explorer 8等老旧浏览器的项目。
- 先引入 jQuery 3.7.1:
<script src="jquery-3.7.1.min.js"></script> - 立即执行:
var jq3 = jQuery.noConflict(true);(注意true参数,清空window.$和window.jQuery) - 再引入
layui.js—— 此时window.jQuery为空,Layui 会加载内置 jQuery - 后续代码中:
jq3(...)用新版,layui.$(...)用旧版,互不干扰
第三方 jQuery 插件报 $ is not defined 怎么办
很多老插件(如拖拽库、日期选择器)依赖全局 $ 或 jQuery,而 Layui 的 layui.$ 不暴露到 window,导致插件初始化失败,报错 TypeError: Cannot read property 'fn' of undefined。
不能简单地 window.$ = layui.$ —— 这会破坏隔离,引发表格渲染异常、layer.full 高度卡死在 152px 等问题。
- ✅ 安全做法:把插件封装成 Layui 模块,显式传入
layui.$ - ✅ 示例(简化):
layui.define('jquery', function(exports){ var $ = layui.$; $.fn.myPlugin = function() { ... }; exports('myPlugin', null); }); - ⚠️ 禁止操作:不要在
layui.js源码里硬改layui.jquery = jQuery—— 会破坏table模块中$.extend(true, {}, options)对数组的兼容处理
为什么 layui.$ 不能直接替换为 jQuery 3.x
不是“不能换”,而是 Layui 多个模块深度耦合 jQuery 1.x 的行为细节:
-
form.js用$.browser判断浏览器(jQuery 3.x 已移除) -
table.js依赖$.parseJSON(jQuery 3.x 中废弃,需改用原生JSON.parse) -
layer.full计算 iframe 高度时,依赖 jQuery 1.x 的.outerHeight(true)返回逻辑,3.x 返回值不同导致固定 152px - 事件委托如
$('body').on('click', '.btn', handler)在 jQuery 3.x 中对动态元素的冒泡路径处理有差异,影响lay-affix="eye"图标点击响应
这些不是配置能绕过的,是底层 DOM 遍历和属性读取方式的变更。强行替换,表面能跑,但表单验证、表格分页、弹层尺寸等关键功能会间歇性失灵。










