在我突出顯示并洗掉表格的最后一行后,我無法向上移動。它似乎只是來回移動,直到我洗掉另一行。在第一個 deleteRow 之后,它在洗掉奇數行后起作用。洗掉偶數行后它再次卡住。僅最后一行。
所以我知道這可能與我的偶數行有關。

我知道洗掉偶數最后一行后,findLastHighlight() 函式回傳“未定義”。
在 moveUp() 函式中,如果變數 newHighlightedRow 被賦值為 undefined,它總是會轉到第一行。
let newHighlightedRow = (lastHighlightedRow == 1) ?
(allTableRows.length - 1) : (lastHighlightedRow - 2);
function moveUp(e) {
let lastHighlightedRow = findLastHighlight();
let allTableRows = [...document.querySelectorAll(".track_row")];
let newHighlightedRow = (lastHighlightedRow == 1) ?
(allTableRows.length - 1) : (lastHighlightedRow - 2);
if (!lastHighlightedRow) {
allTableRows[0].classList.add("selected_album_row");
allTableRows[0].scrollIntoView({
behavior: "smooth",
block: "nearest",
inline: "center"
});
} else {
if (lastHighlightedRow % 2 == 0) {
allTableRows[newHighlightedRow].classList.add("selected_album_row");
allTableRows[newHighlightedRow].scrollIntoView({
behavior: "smooth",
block: "nearest",
inline: "center"
});
} else {
allTableRows[newHighlightedRow].style.backgroundColor = "aquamarine";
allTableRows[newHighlightedRow].scrollIntoView({
behavior: "smooth",
block: "nearest",
inline: "center"
});
}
}
}
function findLastHighlight() {
let lastRowIndex;
let allTableRows = [...document.querySelectorAll(".track_row")];
let evenTableRows = allTableRows.filter(allTableRow => allTableRow.rowIndex % 2 == 0);
let oddTableRows = allTableRows.filter(allTableRow => allTableRow.rowIndex % 2 != 0);
oddTableRows.forEach((oddTableRow) => {
if (oddTableRow.classList.contains("selected_album_row")) {
oddTableRow.classList.remove("selected_album_row");
lastRowIndex = oddTableRow.rowIndex;
}
});
evenTableRows.forEach((evenTableRow) => {
if (evenTableRow.style.backgroundColor == "aquamarine") {
evenTableRow.style.backgroundColor = "";
lastRowIndex = evenTableRow.rowIndex;
}
});
return lastRowIndex;
}
我的問題是在 moveUp 函式還是 newHighlightedRow 變數中?
https://jsfiddle.net/donfontaine12/6wnvp0sz/6/
抱歉,代碼過于復雜。我只是在嘗試。任何幫助將不勝感激。
PS:請忽略第一行和最后一行有時會同時突出顯示。這不會發生在我的實際網站上。
謝謝你。
uj5u.com熱心網友回復:
我想我修好了(仍然不確定這是否是你想要的)
基本上問題出在 findLastHighlight 函式中:
evenTableRows.forEach((evenTableRow) => {
if (evenTableRow.style.backgroundColor == "aquamarine") {
evenTableRow.style.backgroundColor = "";
lastRowIndex = evenTableRow.rowIndex;
}
});
因此,您僅在偶數行中查找突出顯示的行,并且不考慮奇數行,這就是洗掉元素時向上移動不起作用的原因
這樣做
allTableRows.forEach((evenTableRow) => {
if (evenTableRow.style.backgroundColor == "aquamarine") {
evenTableRow.style.backgroundColor = "";
lastRowIndex = evenTableRow.rowIndex;
}
});
似乎修復它。
JSFiddle。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/381587.html
下一篇:Sort()值不存在
