JavaScript - 在最后一行的 deleteRow 之后,无法正确向上移动表格

Posted

技术标签:

【中文标题】JavaScript - 在最后一行的 deleteRow 之后,无法正确向上移动表格【英文标题】:JavaScript - After deleteRow of the last row, can't move up through the table properly 【发布时间】:2022-01-18 17:55:50 【问题描述】:

在我突出显示并删除表格的最后一行后,我无法向上移动。它似乎只是来回走动,直到我删除另一行。在第一个 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:请忽略第一行和最后一行有时会同时突出显示。这不会发生在我的实际网站上。

谢谢。

【问题讨论】:

在您提供的 jsfiddle 中,删除也无法正常工作.. 它从表中删除该行的视觉效果最差。你指的是代码吗?我添加了这段代码:allTableRows.splice(rowIndexForDeletion - 1,1); ,但将其注释掉,因为它并没有太大变化。 我的意思是,例如,如果您删除 Track No 15,它将改为删除 Track No 17。 哦,不,它会重新编号所有曲目。如果需要,您可以禁用它。这是函数 renumberAllTracks() 【参考方案1】:

我想我已经修好了(仍然不确定这是否是你想要的)

基本上问题出在 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.

【讨论】:

哇,谢谢。我想你修好了。我已经尝试了数周来修复它,我知道这将是一个简单的改变。谢谢。

以上是关于JavaScript - 在最后一行的 deleteRow 之后,无法正确向上移动表格的主要内容,如果未能解决你的问题,请参考以下文章

SQL——DELETE(删)

在 extjs 网格中只为一行添加组合框

delphi中stringgrid如何动态增加一行。如何删除一行。

Word如何删除最后一页空白页

选择a的最后一行元件

在一行中删除多个指针。 C++ [重复]