我有以下代码,目前可以根据需要运行。它根据属性objGrid将元素插入loadOrder

let $elTileTitle = $('<div/>', { class: 'tileTitle', html: tile.title });

let $elNext;
for (let i = tile.loadOrder; i < objectLength(tiles); i++) {
    let $potentialNext = $(`.tile[data-loadorder="${i}"]`);
    if ($potentialNext.length > 0) {
        $elNext = $potentialNext;
        break;
    }
}
if (typeof $elNext !== 'undefined') {
    $elTile.insertBefore($elNext);
} else {
    let $elPrev;
    for (let i = tile.loadOrder; i < 0; i--) {
        let $potentialPrev = $(`.tile[data-loadorder="${i}"]`);
        if ($potentialPrev.length > 0) {
            $elPrev = $potentialPrev;
            break;
        }
    }
    if (typeof $elPrev !== 'undefined') {
        $elTile.insertAfter($elPrev);
    } else {
        $elTile.appendTo(objGrid);
    }
}


如上所述,这似乎很好。但是我在我的IDE中注意到一个警告,指出insertBefore()的参数数目无效。查看文档后,我用以下代码替换了这一行:

$('#grid').insertBefore($elTile,$elNext);


这表现出奇怪的行为。此代码运行后,$('#grid')为空。奇怪的是,所有图块都存在于DOM中(即,如果我在控制台中键入$('#tile-store'),则会返回具有所有预期属性的对象),但是我无法在HTML(“元素”标签)中找到它们用户界面为空。

我做错了什么吗?如果需要,我可以提供更多信息

最佳答案

但是我在我的IDE中注意到一个警告,指出insertBefore()的参数数量无效。


您的IDE错误。错误地将the DOM's insertBefore的规则应用于jQuery的insertBefore的使用。您最初使用jQuery很好。如果您使用的是DOM,则需要给它另一个参数。但是它们是完全不同的功能。

09-19 22:22