如何在<td>和& lt; tr>元素
how to traverse between <td> and <tr> element?
下面是一个html表格结构:
<table>
<tr><td>ABC</td></tr>
<tr>
<td><input class="inp"/></td>
<td><input class="inp"/></td>
</tr>
<tr><td><input class="inp"/></td></tr>
<tr><td><input class="inp"/></td></tr>
</table>
<button id="btn">Click me</button>
然后我的目的是让焦点总是去下一个输入字段在类"inp"按钮点击。下面是我的脚本:
var focused = null;
$(".inp").focus(function () {
focused = $(this);
}).first().focus();
$("#btn").click(function(e){
if (focused && focused.length) {
//this only works horizontally.
focused.parent().next().find(".inp").focus();
// this only works vertically.
//focused.closest("tr").next().find(".inp").focus();
}
});
我想聚焦第一行最后一个元素之后的第二行。如何把这两个表述结合起来?
您可以通过在所有输入元素的包装集上使用JQuery .index()
和.eq()
函数来实现这一点。
当焦点位于最后一个输入并且按钮被单击时,将焦点移回第一个输入。
$(function() {
var $inputs = $('.inp');
var index = null;
$inputs.focus(function() {
index = $inputs.index($(this));
});
$inputs.first().focus();
$('#btn').click(function(e) {
if (index != null) {
index = (index + 1) % $inputs.length;
$inputs.eq(index).focus();
}
});
});
jsfiddle
这个版本不会将焦点包装回第一个输入。
$('#btn').click(function(e) {
if (index != null) {
if ((index + 1) < $inputs.length) {
$inputs.eq(index + 1).focus();
}
}
});
jsfiddle
试试这个: