采取以下减少的JS对象(JS小提琴:http://jsfiddle.net/52a4wq0x/1/) - 模拟我想的多维关联数组。
var ControlMap = {
tb_RosMon: { row: 1, col: 1 },
tb_RosTue: { row: 1, col: 2 },
tb_RosWed: { row: 1, col: 3 },
tb_RosThu: { row: 1, col: 4 },
tb_RosFri: { row: 1, col: 5 },
tb_RosSat: { row: 1, col: 6 },
tb_RosSun: { row: 1, col: 7 },
tb_AbsMon: { row: 2, col: 1 },
tb_AbsTue: { row: 2, col: 2 },
tb_AbsWed: { row: 2, col: 3 },
tb_AbsThu: { row: 2, col: 4 },
tb_AbsFri: { row: 2, col: 5 },
tb_AbsSat: { row: 2, col: 6 },
tb_AbsSun: { row: 2, col: 7 },
ddl_ReasonMon: { row: 3, col: 1 },
ddl_ReasonTue: { row: 3, col: 2 },
ddl_ReasonWed: { row: 3, col: 3 },
ddl_ReasonThu: { row: 3, col: 4 },
ddl_ReasonFri: { row: 3, col: 5 },
ddl_ReasonSat: { row: 3, col: 6 },
ddl_ReasonSun: { row: 3, col: 7 },
tb_AddMon: { row: 4, col: 1 },
tb_AddTue: { row: 4, col: 2 },
tb_AddWed: { row: 4, col: 3 },
tb_AddThu: { row: 4, col: 4 },
tb_AddFri: { row: 4, col: 5 },
tb_AddSat: { row: 4, col: 6 },
tb_AddSun: { row: 4, col: 7 },
Mon_AddReason: { row: 5, col: 1 },
Tue_AddReason: { row: 5, col: 2 },
Wed_AddReason: { row: 5, col: 3 },
Thu_AddReason: { row: 5, col: 4 },
Fri_AddReason: { row: 5, col: 5 },
Sat_AddReason: { row: 5, col: 6 },
Sun_AddReason: { row: 5, col: 7 }
}
这基本上是输入ID(tb_RosMon
,tb_AbsMon
等)及其行&amp;的映射。 HTML <table>.
中的列我尝试将键导航添加到相关输入(向上,向下,向左和向右)。
即。如果用户在tb_AbsTue
上按下向下箭头,我会按如下方式获取tb_AbsTue
的位置:
var row = ControlMap[SourceID]["row"]; //Returns 2
var col = ControlMap[SourceID]["col"]; //Returns 2
然后我会逐行递增(当他们按下时)给我一个第3行第2行的目标。然后我需要搜索上面的对象以查看是否存在输入(tb _ ###)在第3行col 2&amp;返回其ID。
怎么能这样做?简单的JS或JQuery就可以了。
答案 0 :(得分:1)
Object.keys
和some
会这样做:
var id;
Object.keys(ControlMap).some(function(key) {
var entry = ControlMap[key];
if (entry.row == desiredRow && entry.col == desiredCol) {
id = key;
return true; // Stops the loop
}
return false;
});
这些都是ES5功能,但它们都可以用于IE8和其他旧版浏览器。或者,您可以使用for-in
:
var id;
var key;
var entry;
for (key in ControlMap) {
entry = ControlMap[key];
if (entry.row == desiredRow && entry.col == desiredCol) {
id = key;
break;
}
}