Javascript 当指定了选择器时,为什么jQuery.index()方法只对集合中的第一个元素有效?

Javascript 当指定了选择器时,为什么jQuery.index()方法只对集合中的第一个元素有效?,javascript,jquery,indexing,Javascript,Jquery,Indexing,我试图通过在同一个表的tfoot中添加来自文本框字段的值来构建一个表。最终的目标是能够在线编辑以前添加的行,同时仍然保留添加更多行的功能 我有以下标记: 服务 协议 源端口 目的港 行动 添加 下面的脚本将tfoot中的所有input[type=text]元素存储在inputs变量中。在此,我尝试使用.index()来识别并检索每个文本框的值: $(文档).ready(函数(){ $('#addBtn')。单击(函数(e){ var inputs=$(this).closest('tfoot

我试图通过在同一个表的
tfoot
中添加来自文本框字段的值来构建一个表。最终的目标是能够在线编辑以前添加的行,同时仍然保留添加更多行的功能

我有以下标记:


服务
协议
源端口
目的港
行动
添加
下面的脚本将
tfoot
中的所有
input[type=text]
元素存储在inputs变量中。在此,我尝试使用
.index()
来识别并检索每个文本框的值:

$(文档).ready(函数(){
$('#addBtn')。单击(函数(e){
var inputs=$(this).closest('tfoot').find('input[type=text]');
控制台日志(输入);
var serviceIndex=inputs.index('[data function=“service”]');
日志(serviceIndex);
console.log(输入[serviceIndex].value);
//其余的索引都返回-1
var protocolIndex=inputs.index('[data function=“protocol”]');
console.log(protocolIndex);
log(输入[protocolIndex].value);
var sourcePortIndex=inputs.index('[data function=“sourcePort”]');
console.log(sourcePortIndex);
log(输入[sourcePortIndex].value);
var destPortIndex=inputs.index('[data function=“destPort”]');
console.log(destPortIndex);
log(输入[destPortIndex].value);
});
});
不幸的是,选择器
data function=“X”
选择器仅适用于服务。所有其他选择器返回
-1
,表示未找到值。上面的代码来自于此。我不想使用索引,但不能使用元素的
id
,因为我需要一个更通用的解决方案

当指定了选择器时,为什么该方法仅适用于集合中的第一个元素?

来自文档:

如果对元素集合和DOM元素调用.index(),jQuery对象传入,.index()返回一个整数,指示 传递的元素相对于原始集合的位置

因此,这应该是可行的:

inputs.index($('[data-function="protocol"]'));
...

演示:

在您正在使用它的上下文中
。只对jQuery集合中的第一个元素调用index
。jQuery对任何非迭代方法(例如
.html
.attr
.text
)都执行此操作--
。index
也不例外


不要使用集合,也可以使用文档中的选择器:

:“如果选择器字符串作为参数传递,.index()返回一个整数,指示第一个元素的位置…”这似乎毫无意义。因此,如果选择器字符串与第一个元素匹配,则返回0。如果元素不在第一个位置-1。换言之,这有什么意义?我想你可能忽略了索引的意义。。。如果这确实是您的代码,那么我会在父级
td
上使用
过滤器
索引
。。。你到底想干什么?我肯定我没抓住重点。:)从文档:从匹配的元素中搜索给定元素。我将其理解为向集合的index方法传递字符串选择器,集合的index方法应返回元素位置。该索引不会迭代集合。这就意味着我偏离了目标。我的目标是准确地检索tfoot中每个文本框的值,以便在tbody中创建一行。然后需要能够修改新创建的行中的值,并希望使用可重用代码。