Javascript 使用jQuery获取最低可用字段名
我有一个表格a,其中字段的名称类似于Javascript 使用jQuery获取最低可用字段名,javascript,jquery,Javascript,Jquery,我有一个表格a,其中字段的名称类似于data[Field][0][value],data[Field][1][value][/code>,等等,其中整数递增,但其余保持不变。有没有办法用jQuery找出可用的最小整数值 我的表单使用JS动态添加和删除字段(其中一些字段是由PHP后端在页面加载时创建的),因此我需要最小的整数,以便创建没有冲突的字段 现在在页面加载时,我将字段计数设置为$(“输入[name$='[value]'))。长度;,然后在创建输入时增加它。这可以防止任何名称空间冲突,但它不
data[Field][0][value],data[Field][1][value][/code>,等等,其中整数递增,但其余保持不变。有没有办法用jQuery找出可用的最小整数值
我的表单使用JS动态添加和删除字段(其中一些字段是由PHP后端在页面加载时创建的),因此我需要最小的整数,以便创建没有冲突的字段
现在在页面加载时,我将字段计数设置为$(“输入[name$='[value]'))。长度;
,然后在创建输入时增加它。这可以防止任何名称空间冲突,但它不考虑删除的输入:我希望能够重新使用删除的字段的名称。如果可以处理数据[Field][0]…data[Field][n]
,那么我会说data[Field]
是一个数组
和data[Field]。length
返回该数组
的当前长度。在这种情况下,最后一个值将位于data[Field][data[Field]。length-1]
中,下一个可用的整数(索引)将是数据[字段].长度
只是为了好玩并演示另一种选择:如果您放弃“命名方案”并使用数据属性跟踪输入字段,例如
,您可以使用一种方法动态确定可用的最低插槽:
function getFreeSlot(inputFields) {
var freeslots = []
,idxs = inputFields.map(
function (i, el) { return +$(el).attr('data-idx');}
).toArray()
idxs.every( function (v,i) {
void( v-(i ? 1 : 0) !== this[(i>0 ? i-1 : 0)]
&& freeslots.push(this[(i>0 ? i-1 : 0)]+1) );
return v; }, idxs );
return freeslots.length ? freeslots[0] : idxs.length+1;
}
如果您可以寻址数据[Field][0]…数据[Field][n]
,那么我会说数据[Field]
是一个数组
和数据[Field]。length
返回该数组
的当前长度。在这种情况下,最后一个值将位于数据[Field][data[Field].length-1]
下一个可用的整数(索引)将是数据[Field].length
只是为了好玩并演示另一种选择:如果您放弃“命名方案”并使用数据属性跟踪输入字段,例如
,您可以使用一种方法动态确定可用的最低插槽:
function getFreeSlot(inputFields) {
var freeslots = []
,idxs = inputFields.map(
function (i, el) { return +$(el).attr('data-idx');}
).toArray()
idxs.every( function (v,i) {
void( v-(i ? 1 : 0) !== this[(i>0 ? i-1 : 0)]
&& freeslots.push(this[(i>0 ? i-1 : 0)]+1) );
return v; }, idxs );
return freeslots.length ? freeslots[0] : idxs.length+1;
}
如果您可以寻址数据[Field][0]…数据[Field][n]
,那么我会说数据[Field]
是一个数组
和数据[Field]。length
返回该数组
的当前长度。在这种情况下,最后一个值将位于数据[Field][data[Field].length-1]
下一个可用的整数(索引)将是数据[Field].length
只是为了好玩并演示另一种选择:如果您放弃“命名方案”并使用数据属性跟踪输入字段,例如
,您可以使用一种方法动态确定可用的最低插槽:
function getFreeSlot(inputFields) {
var freeslots = []
,idxs = inputFields.map(
function (i, el) { return +$(el).attr('data-idx');}
).toArray()
idxs.every( function (v,i) {
void( v-(i ? 1 : 0) !== this[(i>0 ? i-1 : 0)]
&& freeslots.push(this[(i>0 ? i-1 : 0)]+1) );
return v; }, idxs );
return freeslots.length ? freeslots[0] : idxs.length+1;
}
如果您可以寻址数据[Field][0]…数据[Field][n]
,那么我会说数据[Field]
是一个数组
和数据[Field]。length
返回该数组
的当前长度。在这种情况下,最后一个值将位于数据[Field][data[Field].length-1]
下一个可用的整数(索引)将是数据[Field].length
只是为了好玩并演示另一种选择:如果您放弃“命名方案”并使用数据属性跟踪输入字段,例如
,您可以使用一种方法动态确定可用的最低插槽:
function getFreeSlot(inputFields) {
var freeslots = []
,idxs = inputFields.map(
function (i, el) { return +$(el).attr('data-idx');}
).toArray()
idxs.every( function (v,i) {
void( v-(i ? 1 : 0) !== this[(i>0 ? i-1 : 0)]
&& freeslots.push(this[(i>0 ? i-1 : 0)]+1) );
return v; }, idxs );
return freeslots.length ? freeslots[0] : idxs.length+1;
}
假设您的描述是页面上动态创建/销毁字段的名称属性(换句话说,
):
这应该得到DOM中名称与regexData[Field][.*][value]
匹配的最后一个元素。如果要确保中间的位是数字,则需要更多地参与:
var $lastField = $('[name^=Data\\[Field\\]\\[').filter(function(idx, element) {
return /Data\[Field\]\[[0-9]+?\]\[value\]/.test($(this).attr('name'));
}).last();
var lastField = $lastField[0];
假设您的描述是页面上动态创建/销毁的字段的name
属性(换句话说,
):
这应该得到DOM中名称与regexData[Field][.*][value]
匹配的最后一个元素。如果要确保中间的位是数字,则需要更多地参与:
var $lastField = $('[name^=Data\\[Field\\]\\[').filter(function(idx, element) {
return /Data\[Field\]\[[0-9]+?\]\[value\]/.test($(this).attr('name'));
}).last();
var lastField = $lastField[0];
假设您的描述是页面上动态创建/销毁的字段的name
属性(换句话说,
):
这应该得到DOM中名称与regexData[Field][.*][value]
匹配的最后一个元素。如果要确保中间的位是数字,则需要更多地参与:
var $lastField = $('[name^=Data\\[Field\\]\\[').filter(function(idx, element) {
return /Data\[Field\]\[[0-9]+?\]\[value\]/.test($(this).attr('name'));
}).last();
var lastField = $lastField[0];
假设您的描述是页面上动态创建/销毁的字段的name
属性(换句话说,
):
这应该得到DOM中名称与regexData[Field][.*][value]
匹配的最后一个元素。如果要确保中间的位是数字,则需要更多地参与:
var $lastField = $('[name^=Data\\[Field\\]\\[').filter(function(idx, element) {
return /Data\[Field\]\[[0-9]+?\]\[value\]/.test($(this).attr('name'));
}).last();
var lastField = $lastField[0];
您是否可以保留一个已删除元素的列表,然后在需要创建新元素时仅弹出列表中的一个元素以供使用(如果列表为空,则只需像现在这样增加字段计数)。您是否可以保留一个已删除元素的列表,然后在需要创建新元素时仅弹出列表中的一个元素以供使用(如果列表为空,只需像现在一样增加字段计数即可)。是否可以保留一个已删除元素的列表,然后只弹出列表中的一个元素,以便在需要创建新元素时使用(如果列表为空,只需像现在一样增加字段计数).您是否可以保留一个已删除元素的列表,然后仅弹出列表中的一个元素,以便在需要创建新元素时使用(如果列表为空,只需像现在一样增加字段计数).您想实现什么功能?使用字段名作为逻辑是不好的做法。我有一个表单,其中的字段由