Javascript jQuery在元素之间循环,按数据id排序,并从具有匹配数据id的元素中获取值
我要做的是从相同的组ID中获取两个数据组分数值,并将它们相加: 到目前为止,我已获得的更新版本: 示例HTML:Javascript jQuery在元素之间循环,按数据id排序,并从具有匹配数据id的元素中获取值,javascript,jquery,html,Javascript,Jquery,Html,我要做的是从相同的组ID中获取两个数据组分数值,并将它们相加: 到目前为止,我已获得的更新版本: 示例HTML: <div class="quiz-block-container"> <div class="quiz-block-question" data-group-id="1" data-group-score="2"> </div> <div class="quiz-block-question" data-group-id="1
<div class="quiz-block-container">
<div class="quiz-block-question" data-group-id="1" data-group-score="2">
</div>
<div class="quiz-block-question" data-group-id="1" data-group-score="3">
</div>
<div class="quiz-block-question" data-group-id="2" data-group-score="1">
</div>
<div class="quiz-block-question" data-group-id="2" data-group-score="3">
</div>
<div class="quiz-block-question" data-group-id="3" data-group-score="3">
</div>
<div class="quiz-block-question" data-group-id="3" data-group-score="1">
</div>
<div class="quiz-block-question" data-group-id="4" data-group-score="1">
</div>
<div class="quiz-block-question" data-group-id="4" data-group-score="1">
</div>
</div>
JS(2)
听起来你只是想要一个
.map/reduce
操作。这将返回一个键/值对为id/total的对象
var q=document.querySelectorAll('.quick-block-question');
var res=Array.from(q,el=>
({id:el.dataset.groupId,分数:+el.dataset.groupScore})
).减少((obj,d)=>
赋值(obj,{[d.id]:(obj[d.id]| | 0)+d.score})
, {});
控制台日志(res)代码>
这可能是一个更接近的版本:1组id始终有2组分数?你是什么意思?可能重复感谢,是否可以使用jQuery保持一致?如果我需要使用数组结果,那么最好的方法是什么?再次感谢你的帮助!绝对明星@James:如果您想要jQuery,只需将document.querySelectorAll
更改为$
。其余的保持不变。使用结果的最佳方式是什么?什么意思?它只是一个对象。好的,可以在jquery中执行数组/循环吗?
$('.quiz-block-question').each(function() {
var id = $(this).data('group-id');
var score = $(this).data('group-score');
var i = 0;
$("[data-group-id='" + id + "']").each(function(index) {
if(++i > 2) {
return false;
}
//$(this).find('.group-id').text(id);
//console.log("group: " + $(this).data('group-id'));
//$(this).find('.group-score').text(score);
//console.log("group score: " + $(this).data('group-score'));
var first = $(this).data('group-score')[1];
console.log(first);
var second = $(this).data('group-score')[2];
var total = first + second;
$('.results').append("total:" + total);
});
//return false
});
$('.quiz-block-question').each(function(i) {
var groupID = $(this).data("group-id");
if ($(this).data('group-id') == i + 1) {
//console.log(this);
$("[data-group-id='"+i+"']").each(function() {
console.log(this);
var questionGroupID = $(this).data('group-id');
$(this).each(function() {
console.log("group score: "+$(this).attr('data-group-score'));
});
});
}
});