0
$(".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) 都有自己的唯一 ID,应用于 data-task-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
    }
});

据我所知,这确保了同一任务永远不会同时出现在两个地方。

4

2 回答 2

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");
    }
});
于 2013-07-28T15:54:57.503 回答
0

data您可以使用 的功能标记已经处理(克隆)的元素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. (注:cloned是任意名称,您可以使用任何您喜欢的名称。)

于 2013-07-28T14:29:08.097 回答