首页 > 解决方案 > 具有排序功能的 MutationObserver 中的无限循环

问题描述

MutationObserver 检测 notifyDiv div 何时发生变化。之后,另一个函数做出正确的顺序。但这最终会导致 div 发生新的变化,并进入一个无限循环。

var target = document.querySelector('.notifyDiv');
var observer = new MutationObserver(function(mutations) {
    var divList = $(".notifyItem");
    divList.sort(function(a, b){
        return $(b).data("id")-$(a).data("id")
    });
    $(".notifyDiv").html(divList);
});

标签: javascriptjquerymutation-observers

解决方案


嗯...为方便起见,我隐藏了 notifyDiv div 并创建了另一个相同的名为 notifyDivShow 的,所以当重新排序 notifyDiv 时仅在 notifyDivShow 中显示结果。

var target = document.querySelector('.notifyDiv');
var observer = new MutationObserver(function(mutations) {
    var divList = $(".notifyItem");
    divList.sort(function(a, b){
        return $(b).data("id")-$(a).data("id")
    });
    $(".notifyDivShow").html(divList);
});

div

<div class="notifyDiv" style="display: none;"></div>
<div class="notifyDivShow"></div>

推荐阅读