Javascript jQuery-Can';t克隆表单中的嵌套行
与问题类似,我有一个表单,希望使用Javascript jQuery-Can';t克隆表单中的嵌套行,javascript,jquery,html,Javascript,Jquery,Html,与问题类似,我有一个表单,希望使用clone()和remove()动态更改用户可见的字段。用户有两个控件:+和-分别用于添加或删除行 然而,我的问题略有不同,因为我想为表单中的每个嵌套行启用克隆,使它们彼此独立。用法是允许用户指定一个或多个时间间隔(例如,每天上午9点到下午5点)。换句话说,用户应该能够添加任意多的时间间隔,但单击星期一下的+或-,只会影响星期一内的字段行,而不会影响其他日期 屏幕截图 我能够在单击+或-复制整行(包括复选框)的位置获得它-这不是我想要的: 我知道From和
clone()
和remove()
动态更改用户可见的字段。用户有两个控件:+
和-
分别用于添加或删除行
然而,我的问题略有不同,因为我想为表单中的每个嵌套行启用克隆,使它们彼此独立。用法是允许用户指定一个或多个时间间隔(例如,每天上午9点到下午5点)。换句话说,用户应该能够添加任意多的时间间隔,但单击星期一下的+
或-
,只会影响星期一
内的字段行,而不会影响其他日期
屏幕截图
我能够在单击+
或-
复制整行(包括复选框)的位置获得它-这不是我想要的:
我知道From
和To
字段需要在父div
中,而这个父div
应该被克隆。但是,当我进行此更改时,它根本不会克隆
以下是我的最新尝试:
var regex=/^(+?)(\d+)$/i;
变异克隆指数=$(“.time interval”).length;
函数克隆(){
$(this.parents(“.time interval”).clone()
.附件(“正文”)
.attr(“id”、“时间间隔”+克隆索引)
.find(“*”)
.each(函数({
var id=this.id | |“”;
var match=id.match(正则表达式)| |[];
如果(match.length==3){
this.id=匹配[1]+(克隆索引);
}
})
.on('单击','添加间隔',克隆)
.on('click','remove interval','remove');
克隆索引++;
}
函数删除(){
$(this.parents(“.time interval”).remove();
}
$(“.add interval”)。单击(“单击”,克隆);
$(“.remove interval”)。单击(“单击”,删除)代码>
.row{
背景#f8f9fa;
边缘顶部:20px;
}
上校{
边框:实心1px#6c757d;
填充:10px;
}
.btn alt成功{
颜色:#5c852c;
背景色:#ebf5df;
边框颜色:#ebf5df;
}
.btn高度危险{
颜色:#af1310;
背景色:#fae9e8;
边框颜色:#fae9e8;
}
.actions>a{
光标:指针;
}
日子*
时代
星期一
上午12点
凌晨1点
凌晨2点
凌晨3点
凌晨4点
上午5点
上午6点
上午7点
上午8点
上午9点
上午10点
上午11点
下午12点
下午一时
下午二时
下午三点
下午四点
下午五点
下午六点
下午7点
晚上八点
晚上9点
晚上10点
晚上11点
到
上午12点
凌晨1点
凌晨2点
凌晨3点
凌晨4点
上午5点
上午6点
上午7点
上午8点
上午9点
上午10点
上午11点
下午12点
下午一时
下午二时
下午三点
下午四点
下午五点
下午六点
下午7点
晚上八点
晚上9点
晚上10点
晚上11点
+
-
星期二
上午12点
凌晨1点
凌晨2点
凌晨3点
凌晨4点
上午5点
上午6点
上午7点
上午8点
上午9点
上午10点
上午11点
下午12点
下午一时
下午二时
下午三点
下午四点
下午五点
下午六点
下午7点
晚上八点
晚上9点
晚上10点
晚上11点
到
上午12点
凌晨1点
凌晨2点
凌晨3点
凌晨4点
上午5点
上午6点
上午7点
上午8点
上午9点
上午10点
上午11点
下午12点
下午一时
下午二时
下午三点
下午四点
下午五点
下午六点
下午7点
晚上八点
晚上9点
晚上10点
晚上11点
+
-
星期三
上午12点
凌晨1点
凌晨2点
凌晨3点
凌晨4点
上午5点
上午6点
上午7点
上午8点
上午9点
上午10点
上午11点
下午12点
下午一时
js:
var regex = /^(.+?)(\d+)$/i;
var cloneIndex = $(".time-interval").length;
function clone(){
var $closestTimeInterval = $(this).closest(".actions").siblings(".time-interval").first();
$closestTimeInterval.clone()
.insertAfter($closestTimeInterval).attr("id", "time-interval" + cloneIndex)
.find("*")
.each(function() {
var id = this.id || "";
var match = id.match(regex) || [];
if (match.length == 3) {
this.id = match[1] + (cloneIndex);
}
});
cloneIndex++;
}
function remove(){
$(this).parents(".time-interval").remove();
}
$(".add-interval").on("click", clone);
$(".remove-interval").on("click", remove);