我有以下代码,目前可以根据需要运行。它根据属性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,则需要给它另一个参数。但是它们是完全不同的功能。