如何从多个同class的div中获取data属性?求代码方案合理性评估
关于批量获取相同class元素data属性的方案合理性分析
嘿,你的代码逻辑完全站得住脚,而且已经做得很规范了——先做元素存在性检查,再遍历收集data-cartid值,最后输出,整个流程没有问题,能稳定拿到你想要的结果👍
为什么你的方案是合理的?
- 你先通过
$(".forComments").length > 0做了前置检查,避免了对空元素集合执行遍历操作,这是个非常好的性能优化小细节 - 使用jQuery的
.data("cartid")来获取属性值是完全正确的:jQuery会自动处理data-*属性的命名转换(比如把data-cartid转换成驼峰式的cartid),而且还会把获取到的值缓存起来,后续再访问的话速度会更快
可以优化的精简写法
如果想让代码更简洁,不用手动声明数组再逐个push,可以用jQuery的.map()方法一步完成数组构建:
if ($(".forComments").length > 0) { // 用map直接生成数组,get()把jQuery对象转成普通数组 const cartCommentsId = $(".forComments").map(function() { return $(this).data("cartid"); }).get(); // 用forEach替代$.each,更符合现代JS习惯 cartCommentsId.forEach(item => console.log(item)); }
补充:原生JS属性读取方式
如果你的需求只是读取data-cartid的原始字符串值,也可以直接用原生DOM的dataset属性,跳过jQuery的data缓存机制:
const cartCommentsId = $(".forComments").map(function() { return this.dataset.cartid; }).get();
这种方式性能会稍微好一点,但差异极小,日常开发中完全可以根据自己的习惯选择两种方式。
内容的提问来源于stack exchange,提问作者Sarath TS
相关产品推荐
相关产品推荐

