$(".sect-tasklist li.is-running").each(function(){
var $this = $(this),
taskID = $(this).data("task-id");
if ( /*if elem has already been cloned*/ ) {
console.log("already cloned, don't clone it again");
} else {
$(this).clone().appendTo(".helper-timers");
}
});
每个任务(li.is-running)都在data-task-id属性中应用了自己的唯一ID。代码应该将每个任务复制到临时div(.helper-timers)中,但是如果某个任务已经被克隆并存在于.helper-timers中,那么显然不需要再次复制。
对于任何想知道的人,我设法解决了这个问题。
(function(){
jQuery.fn.cloneRunningTimers = function() {
$(".sect-tasklist li.is-running").each(function(){
var $this = $(this),
taskID = $this.data("task-id");
if ( $(".helper-timers li.task-id-" + taskID).length ) { // if exists
// already cloned, don't clone again
} else { // if doesn't exist
$this.clone().appendTo(".helper-timers"); // clone
}
});
}; // fn cloneRunningTasks
})();
然后我获得任务的部分功能包括:
$(".helper-timers li").each(function(){
var $this = $(this),
taskID = $this.data("task-id");
if ( $(".sect-tasklist li.task-id-" + taskID).length ) { // if exists it task list
$this.remove(); // delete it from helper list
}
});
据我所知,确保同时完成同一任务。
答案 0 :(得分:1)
您可以创建已克隆的任务ID的外部引用:
var alreadyCloned = [];
$(".sect-tasklist li.is-running").each(function(){
var $this = $(this),
taskID = $(this).data("task-id");
if ( $.inArray(taskID, alreadyCloned) > -1 ) {
console.log("already cloned, don't clone it again");
} else {
alreadyCloned.push(taskID);
$this.clone().appendTo(".helper-timers");
}
});
答案 1 :(得分:0)
您可以使用data
的{{1}}函数标记已经处理(克隆)的元素。
例如:
jquery
if ($this.data('cloned')) {
console.log("already cloned, don't clone it again");
} else {
$this.data('cloned', true);
$this.clone().appendTo(".helper-timers");
}
将返回数据字段$this.data('cloned')
的值,cloned
会将数据字段设置为$this.data('cloned', true)
。 (注意:true
是一个任意名称,您可以使用任何您喜欢的名称。)