jQuery中用for循环批量设置标签值报html is not a function错误如何解决
错误原因
jQuery选择器返回的是类数组的jQuery实例对象,使用[索引]方式取到的是原生DOM元素,并非jQuery封装对象,原生DOM元素没有.html()这个jQuery专属方法,因此触发类型错误。
你单独用$("#label1")获取的是完整的jQuery封装对象,所以可以正常调用.html()方法。
解决方案
以下三种方案均可解决问题,按需选择即可:
- 方案1:将原生DOM元素包装为jQuery对象后调用方法
修改循环内的代码,把取到的原生标签节点用$()包裹:
$('.button').click(function() { var inputArray = $("input[type=hidden]"); var labelArray = $(".labels"); for (var i = 0; i < inputArray.length; i++) { $(labelArray[i]).html(inputArray[i].value); } });
(注:原代码末尾遗漏了click回调的闭合右括号,上述代码已补全)
- 方案2:直接使用原生DOM属性赋值,不需要依赖jQuery方法
直接调用原生DOM的innerHTML属性赋值即可:
labelArray[i].innerHTML = inputArray[i].value;
- 方案3:使用jQuery内置的
.each()方法遍历,更符合jQuery的编码习惯
不需要手动写for循环,避免索引取值的问题:
$('.button').click(function() { const $inputArray = $("input[type=hidden]"); $(".labels").each(function(index) { $(this).html($inputArray.eq(index).val()); }); });
内容的提问来源于stack exchange,提问作者Menkot
相关产品推荐
相关产品推荐

