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

如何解决‘has is not a function’错误?获取含选中input元素遇问题求助

问题原因与修正方案

咱们先拆解下你遇到的「has is not a function」错误,核心是两个问题:

1. 混淆了原生DOM元素与jQuery对象的方法

如果你的allDiv是通过原生JS方法(比如document.querySelectorAll('div'))获取的元素集合,那循环里的x是原生DOM节点——原生DOM元素并没有has()方法,这个方法是jQuery对象特有的,直接调用肯定会报错。

2. has()方法的参数逻辑错误

就算x是jQuery对象,你传入的$('input').is(':checked')是一个布尔值,而jQuery的has()方法需要的是选择器、DOM元素或者jQuery对象,不是布尔值。而且这个写法会全局查找所有input的选中状态,不是针对当前x内部的input,逻辑本身也不对。


下面给你两种可行的修正方案,根据你的技术栈选择:

方案一:原生JS写法(推荐,无需依赖jQuery)

假设allDiv是原生DOM集合:

for (const x of allDiv) {
  // 在当前div内部查找是否有被选中的input
  if (x.querySelector('input:checked')) {
    console.log(x.parentElement.textContent);
  }
}

解释:querySelector('input:checked')会在x这个元素范围内查找选中的input,找到就返回该元素(转为布尔值是true),找不到返回null(布尔值false),刚好满足判断需求。

方案二:jQuery写法(如果项目依赖jQuery)

如果allDiv是jQuery对象(比如$('div')),可以这样写:

allDiv.each(function() {
  // 检查当前jQuery元素下是否包含选中的input
  if ($(this).has('input:checked').length > 0) {
    console.log($(this).parent().text());
  }
});

或者更简洁的筛选写法:

// 直接筛选出包含选中input的div,再遍历输出
allDiv.filter(':has(input:checked)').each(function() {
  console.log($(this).parent().text());
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 10:37:49