Javascript 获取当前TR索引,以便向DOM添加/删除TR元素,并保持引用同步

Javascript 获取当前TR索引,以便向DOM添加/删除TR元素,并保持引用同步,javascript,jquery,dom,indexing,focus,Javascript,Jquery,Dom,Indexing,Focus,我有一个html页面,可以在其中添加和删除input字段。通过在最后一个输入字段中按“回车”键添加,并通过在输入字段中按组合键“CTRL+Backspace”删除 如果我只添加或删除最后一个输入字段,这就可以了如果在中间开始删除输入字段,则不起作用。< /强>不起作用,因为我最后一行由最后一个代码“id > TR 标识,并且如果在中间删除了输入< /代码>字段,则该概念将不再工作。p> 作为当前的解决方案,我想知道活动tr的索引,这样我就不必依赖我的id属性。对于currenttr,我指的是具有

我有一个html页面,可以在其中添加和删除
input
字段。通过在最后一个
输入
字段中按“回车”键添加,并通过在
输入
字段中按组合键“CTRL+Backspace”删除

如果我只添加或删除最后一个
输入
字段,这就可以了<强>如果在中间开始删除<代码>输入字段,则不起作用。< /强>不起作用,因为我最后一行由最后一个代码“id > TR 标识,并且如果在中间删除了<代码>输入< /代码>字段,则该概念将不再工作。p> 作为当前的解决方案,我想知道活动
tr
的索引,这样我就不必依赖我的id属性。对于current
tr
,我指的是具有焦点的输入字段但在这里我很挣扎,我只能使用id属性访问当前位置。

//从活动元素获取id
activeElementID=$(位置).attr('id');
我试图获取索引,但没有得到任何结果,它的alwas索引为0:

//从活动元素获取id
activeElementID=$(位置).attr('id');
aEl=$(位置).parent().index();
控制台日志(“索引:+aEl”);
//每个输入字段上的输出:“索引:0”
如何识别当前的
tr
索引,并对其进行处理,例如删除当前的
tr

重要:每行
tr
都绑定到数组中的一个对象(在我的名为Dom的代码中),
tr
的索引和数组的索引应该相同,以便我知道哪一行属于数组中的哪个元素。数组将在
tr
/
输入
字段中存储我需要的内容

我对其他解决方案也持开放态度,可以使用所描述的行为添加和删除行,并且这些行应该耦合到我可以访问和存储附加信息的对象上

这是我当前的解决方案,我需要知道如何识别当前的
tr
索引:


行测试
//全局函数
//zeilen ID:zeileX,没有#
函数zeilenID(id){
返回“zeile”+id;
}
//css zeilen ID:#zeileX
函数zID(id){
返回“#”+zeilenID(id);
}
函数inputID(id){
返回“输入”+id;
}
函数iID(id){
返回“#”+inputID(id);
}
//包含该行的数组。
//lastline是最后一行的lineID
Dom=函数(){};
Dom.prototype.Dom=新数组();
//Dom.prototype.lastline=“未设置”;
//在Dom中保存数据的新对象
Line=函数(){};
Line.prototype.variable=“var name”;
//obj,应该是一个foo-Dom对象
函数addRow(obj){
nLine=foo.dom.length;//数组2的大小
obj.dom.push(新行);//数组的新大小3。这就是为什么nLine必须在前面出现的原因!!!
$(“#行tr:last”)。在(“”)之后;
//foo.lastline=nLine;//输入(键);
$(iID(nLine)).focus();
}
函数rmRow(obj,id){
对象拼接(id,1);
}
$(文档).ready(函数(){
//创建一个新的Dom调用foo
foo=newdom();
log(“count:+foo.dom.length”);
//添加新的数组元素
foo.dom.push(新线);
//创建一个名为linie的新行
linie=新的行();
//更改变量的内容
linie.variable=“platzhalter”;
foo.dom.push(linie);
$.each(foo.dom,function(key,val){
控制台日志(键);
对于(kex in val){
console.log(“>”+kex+”:“+val[kex]);
}
$(“#行tr:last”)。在(“”)之后;
//foo.lastline=key;//inputID(key);
} );
});
$(文档)。按键(功能(e){
如果(e.which==13){
//警报(“您按了enter!”);
//获取活动元素
position=document.activeElement;
//从活动元素获取id
activeElementID=$(位置).attr('id');
aEl=$(位置).parent().index();
控制台日志(“索引:+aEl”);
log(“焦点元素id:+activeElementID”);
log(“上次计数:+foo.dom.length”);
lastline=inputID(foo.dom.length-1);
amountOfRows=$(“#lines tr”).length-1;//由于我们还有一个tr,标题
如果(activeElementID==lastline){
addRow(foo);
}
}
//CTRL+Backspace
如果(e.ctrlKey){//CTRL
如果(e.which==8){//退格
log(“带CTRL的退格…);
position=document.activeElement;
//从活动元素获取id
activeElementID=$(位置).attr('id');
activeNum=activeElementID.substr(-1);
$(zID(activeNum)).remove();
rmRow(foo,activeNum);
log(“删除的行:+activeNum”);
$(iID(activeNum-1)).focus();
}
}
});

parent()
prop()
rowIndex
解决了这个问题

aEl=$(位置).parent().parent().prop('rowIndex')-1;
控制台日志(“索引:+aEl”);

不解释原因的否决票是不公平的行为:-1。