我正在尝试通过从tfoot
同一个表的文本框字段中添加值来构建一个表。最终目标是能够内联编辑先前添加的行,同时仍然保留添加更多行的能力。
我有以下标记:
<table>
<thead>
<tr>
<th>Service</th>
<th>Protocol</th>
<th>Source Port</th>
<th>Destination Port</th>
<th>Action</th>
</tr>
</thead>
<tfoot>
<tr>
<td>
<input type="text" data-function="service" value="foo" />
</td>
<td>
<input type="text" data-function="protocol" value="bar" />
</td>
<td>
<input type="text" data-function="sourcePort" value="baz" />
</td>
<td>
<input type="text" data-function="destPort" value="fob" />
</td>
<td>
<button id="addBtn" type="button">Add</button>
</td>
</tr>
</tfoot>
</table>
以下脚本将所有input[type=text]
元素存储tfoot
在输入变量中。从那里我试图用来.index()
识别然后检索每个文本框的值:
$(document).ready(function () {
$('#addBtn').click(function (e) {
var inputs = $(this).closest('tfoot').find('input[type=text]');
console.log(inputs);
var serviceIndex = inputs.index('[data-function="service"]');
console.log(serviceIndex);
console.log(inputs[serviceIndex].value);
// the remaining indexes all return -1
var protocolIndex = inputs.index('[data-function="protocol"]');
console.log(protocolIndex);
console.log(inputs[protocolIndex].value);
var sourcePortIndex = inputs.index('[data-function="sourcePort"]');
console.log(sourcePortIndex);
console.log(inputs[sourcePortIndex].value);
var destPortIndex = inputs.index('[data-function="destPort"]');
console.log(destPortIndex);
console.log(inputs[destPortIndex].value);
});
});
不幸的是,选择器选择data-function="X"
器仅适用于服务。所有其他选择器返回-1
指示未找到值。上面的代码来自这个jsFiddle,它说明了这个问题。我不喜欢使用索引,但不能使用元素id
,因为我需要一个更通用的解决方案。
当指定选择器时,为什么jQuery .index()方法仅适用于集合中的第一个元素?