使用jQuery获取动态name/id的input元素data-quantity值的问题
首先得揪出你之前代码的问题——你用的.quan" + obj是类选择器,但你的元素里quan2是name属性的值,不是class,所以这个选择器根本找不到目标元素。而$("#" + count)理论上是可行的(毕竟id是唯一的),如果没生效,大概率是代码执行时机不对(比如元素还没动态生成就调用了函数),或者有语法小问题。
下面给你两种可靠的实现方式,分别对应按name或id获取data-quantity的值:
1. 根据name属性获取
要通过name选择元素,得用属性选择器[name='value'],写法如下:
function get() { let count = 3; let obj = 2; // 根据name属性定位元素,再获取data-quantity的值 let quantity = $("[name='quan" + obj + "']").data("quantity"); console.log(quantity); // 会输出初始值1 }
这里更推荐用.data("quantity")而非.attr("data-quantity"),因为jQuery的.data()会自动处理数据类型,还会缓存data属性的值,使用起来更灵活。
2. 根据id获取
如果你的id是唯一的(按照你的逻辑,count是1-5,肯定唯一),那$("#" + count)是完全可行的,检查下是不是代码执行时机不对(比如元素还没生成就调用了get函数)。正确写法:
function get() { let count = 3; let obj = 2; // 根据id定位元素,再获取data-quantity的值 let quantity = $("#" + count).data("quantity"); console.log(quantity); }
额外提醒:如果是要修改值的话
你之前写的.attr("data-quantity","4")是设置DOM属性值,要是你想修改data-quantity,用.data("quantity", 4)会更合适——它会同时更新jQuery内部的缓存和DOM属性(不过注意,.data()修改后,DOM上的data-quantity属性不会立刻改变,但后续用.data()获取的是修改后的值)。
另外,务必确保jQuery已经正确引入,而且代码是在DOM加载完成后执行的(比如放在$(document).ready(function(){ ... })里),不然动态生成的元素可能还没被jQuery识别到。
内容的提问来源于stack exchange,提问作者kamranbhatti585

