升级jQuery 3.6.1后无法通过Dialog父元素定位按钮的问题排查
问题原因及解决方法
原代码失效的核心原因
- 选择器冗余类导致匹配失败:原代码里的
button.ui-button.ui-button-text-only包含了ui-button-text-only类,但升级到jQuery 3.6.1后,你配套的jQuery UI版本大概率也同步更新了——旧版jQuery UI会自动给按钮附加ui-button-text-only类,而新版本不再添加这个类,导致选择器找不到对应元素。 - 你尝试的
$("#Dialog").parent("button.ui-button.ui-button-text-only")逻辑错误:parent()方法仅查找当前元素的直接父元素,#Dialog的直接父元素是<div class="parent">,并非按钮元素,所以这个写法从一开始就不可能匹配到目标。
符合要求的正确写法(基于#Dialog定位)
因为你不能修改HTML结构,只能通过#Dialog的ID来定位,推荐两种写法:
- 利用兄弟元素定位:先找到
#Dialog的兄弟节点.buttonPane,再向下查找按钮var button_list = $("#Dialog").siblings(".buttonPane").find("button.ui-button"); - 基于父元素范围查找:先获取
#Dialog的父元素,再在父元素内部定位按钮var button_list = $("#Dialog").parent().find(".buttonPane button.ui-button");
为什么$(".buttonset").children(".ui-button")有效
这个选择器只依赖页面中实际存在的类(.buttonSet和.ui-button,你代码里HTML是buttonSet大写S,写法里是小写s,应该是笔误),没有用到那个被新版本jQuery UI移除的ui-button-text-only类,所以能正常匹配到按钮。
内容的提问来源于stack exchange,提问作者tanmayghosh2507
相关产品推荐
相关产品推荐

