Javascript 使用jQuery更新TR的数据属性

Javascript 使用jQuery更新TR的数据属性,javascript,jquery,Javascript,Jquery,我已经阅读了许多答案,但我仍然不太确定如何更新TR的属性。我的代码的想法是在更新第一行的数据属性时将类似的行合并为一行 我在蓝色的火焰中错过了什么??对于过程,最终结果应该是一个表行,并且data auditidentity属性应该具有所有四个逗号分隔的键。尝试使用attr更新以使所有四个值以逗号分隔失败 var uniqueKeys=[]; var resultsTable=$(“#results”); $(resultsTable).find('tbody>tr')。each(functi

我已经阅读了许多答案,但我仍然不太确定如何更新TR的属性。我的代码的想法是在更新第一行的数据属性时将类似的行合并为一行

我在蓝色的火焰中错过了什么??对于过程,最终结果应该是一个表行,并且data auditidentity属性应该具有所有四个逗号分隔的键。尝试使用attr更新以使所有四个值以逗号分隔失败

var uniqueKeys=[];
var resultsTable=$(“#results”);
$(resultsTable).find('tbody>tr')。each(function(){
var tableName=$(this.find('td:eq(0)')).text();
var tableAction=$(this.find('td:eq(1)').text();
var uniqueKey=tableName+'#'+tableAction;
if(uniqueKey.indexOf(uniqueKey)<0){
uniqueKey.push(uniqueKey);
}否则{
var initValue=“”,
新组合值=“”,
听力性='';
initValue=$(resultsTable).find(“trtd:first-child:contains(“+tableName+”))).parent().attr('data-auditidentity');
var activityLogId=$(this).data('activityLogId');
auditidentity=$(this.data('auditidentity');
newCombinedValues=initValue+“,”+AuditionIdentity;
$(resultsTable).find(“tbody tr td:first:contains(“+tableName+”)).parent().attr('data-auditidentity',newCombinedValues);
//在获得所需内容后,在将键组合成一行时删除组合行
//$(this.remove();
}
});

选择
使现代化
程序
使现代化
程序
使现代化
程序
使现代化
程序
使现代化

您可以尝试这段jQuery代码

var uniqueRows = {}; 
 $('table tr').each(function(){
    var tdValue = $(this).find('td').eq(0).html();
    if(!uniqueRows[tdValue]){
        uniqueRows[tdValue] = $(this); 
    } else {
        uniqueRows[tdValue].data('auditidentity',
            uniqueRows[tdValue].data('auditidentity')+','+$(this).data('auditidentity'));
        $(this).remove(); 
    }
 }); 
请确保在代码中选择了正确的表。
希望对您有所帮助。

问题在于选择器
$(resultsTable)。查找(“tbody tr td:first:contains(“+tableName+”)
:first
表示选择整个文档中的第一个
td
,而不是每行中的第一个
td
。这应该是
:第一个孩子
。然后,您需要使用
:first
,然后在文档中选择所有选项中的第一个。因此,整个选择器应该是
resultsTable.find(“tbody tr td:first child:contains(“+tableName+”):first”)

顺便说一句,您不需要在
$()
中包装
结果表。它已经是jQuery对象了

var uniqueKeys=[];
var resultsTable=$(“#results”);
$(resultsTable).find('tbody>tr')。each(function(){
var tableName=$(this.find('td:eq(0)')).text();
var tableAction=$(this.find('td:eq(1)').text();
var uniqueKey=tableName+'#'+tableAction;
if(uniqueKey.indexOf(uniqueKey)<0){
uniqueKey.push(uniqueKey);
}否则{
var initValue=“”,
新组合值=“”,
听力性='';
initValue=resultsTable.find(“trtd:first-child:contains(“+tableName+”))).parent().attr('data-auditidentity');
var activityLogId=$(this).data('activityLogId');
auditidentity=$(this.data('auditidentity');
newCombinedValues=initValue+“,”+AuditionIdentity;
resultsTable.find(“tbody tr td:first child:contains(“+tableName+”):first”).parent().attr('data-auditidentity',newCombinedValues);
//在获得所需内容后,在将键组合成一行时删除组合行
//$(this.remove();
}
});

选择
使现代化
程序
使现代化
程序
使现代化
程序
使现代化
程序
使现代化
给你:

$(文档).ready(函数(){
var uniqueKeys=[];
var resultsTable=$(“#results”);
$(resultsTable).find('tbody>tr')。each(function(){
var currentAuditionEntity=$(this).data().AuditionEntity;
var currentActivityLogId=$(this).data().activitylogid;
var tableName=$(this.find('td:eq(0)')).text();
var tableAction=$(this.find('td:eq(1)').text();
var uniqueKey={'Name':tableName,'Action':tableAction,'AuditionIdentity':CurrentAuditionIdentity,'ActivityLogId':currentActivityLogId};
var matchingElements=$.grep(唯一键,函数(项){
返回(item!=null&&item.Name==uniqueKey.Name&&item.Action==uniqueKey.Action);
});
if(matchingElements.length==0){
uniqueKey.push(uniqueKey);
}
否则{
matchingElements[0]。AuditionIdentity+=','+CurrentAuditionIdentity;
//在获得所需内容后,在将键组合成一行时删除组合行
$(this.remove();
}
});
//最后,将最新数据放回剩余的唯一行中
$.each(唯一键、函数(索引、值){
var item=$(resultsTable.find('tr').find('td:eq(0):包含(“+value.Name+”))).parent();
item.data().auditidentity=value.auditidentity;
});
//只是为了显示数据结果。
$('span#showArrayData').text(JSON.stringify(uniqueKeys));
});

选择
使现代化
程序
使现代化
程序
使现代化
程序
使现代化
程序
使现代化

因此,基本上您希望检查每行的“数据审核身份”,保留每个唯一值的第一行,并删除具有相同“数据审核身份”属性的其他现有行?@FaridNaderi数据审核身份将是唯一的。我想将四行合并为一行,并更新单个数据的auditentity,使所有四个键都以逗号分隔。更新了我的问题以进一步澄清。小心混合
.attr()
.data()
。我认为您拥有的代码是安全的,但最好是一致的。您能否将您文章中的代码转换为更完整的代码,以便我们可以尝试运行它并进行修改?我是否可以建议您将不起作用的代码分成多个部分并进行调试,以发现表达式的哪一部分出现故障?甚至在调试模式下将它的一部分输入控制台。我的javascript在第一次使用时从不起作用。它需要一套e