Javascript 将表行放置在 ID 较大和较小的行之间

标签 javascript jquery html dom

我正在构建一个系统,该系统在屏幕上(在表格元素中)输出汽车列表。该页面通过对服务器的 HTTP 调用自动加载更新。

每辆车都有一个ID、一个状态和一些不相关的东西。 现在,当用户加载页面时,会显示没有状态“维护”和“失事”的汽车,并且每五秒就会从服务器加载新的 JSON 数据。如果有一辆汽车完成了维护,则应将其添加到表中。该表是按汽车 ID 排序的,问题来了。 我写了一些伪代码来澄清我的问题:

if (row_with_greater_id_exits && row_with_lower_id_exists) {
    place_row_between_firstRowWithGreaterId_and_FirstRowWithLowerId();
} else if (is_row_with_greater_id) {
    jQuery('table#cars tbody').append(generatedHtml);
} else if (is_row_with_lower_id) {
    jQuery('table#cars tbody').prepend(generatedHtml);
}

问题是我不知道如何找到具有较大 id 的第一行或具有较小 ID 的第一行。 ID 并不总是成功,因为有些汽车被毁坏了,并且状态也被破坏了。

我希望这里有人遇到过类似的问题,并且可以帮助我找到解决方案。

非常感谢!

最佳答案

您需要循环遍历行并比较 id。当新行的 ID 小于循环中的当前行时,在当前行之前插入新行,并中断循环。

rows.each(function(i, el) {
    if (+newrow.id < +el.id) {
        $(el).before(newrow);
        return false;
    }
})
if (!newrow.parentNode)
    rows.parent().append(newrow);

此代码假设 rows 是一个包含所有行的集合的 jQuery 对象,而 newrow 是表示新行的 DOM 元素。

还假设 ID 是简单的数字。请注意,数字 ID 仅在 HTML5 中有效。

<小时/>

就我个人而言,我只会使用 native API 来实现此目的:

var tbody = document.querySelector("tbody");

tbody.insertBefore(newrow, [].reduce.call(tbody.rows, function(bef, el) {
    return bef || +newrow.id > +el.id ? bef : el;
}, null));

无需测试isFirstLoad。当tbody为空时,它仍然可以工作。但对于旧版浏览器,您需要一个 .reduce() shim。

关于Javascript 将表行放置在 ID 较大和较小的行之间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14716259/

相关文章:

javascript - 使用 JavaScript for IE 在本地读取 CSV 文件,无需 FileReader API

javascript - 非交互文本

javascript - 将一些数据转换成 json 格式但不确定它是否有效

javascript - 监听 DOM 初始加载后渲染的元素

php - 在 div 中包装 Wordpress 文本内容

javascript - 使用 javascript 或 jquery 进行多数字计数器的循环之间的延迟

javascript - 为什么 .on 不能在我的 $(document).ready() 函数中使用?

c# - Telerik DatePicker 在发布时返回 null

javascript - 如何使用 jquery 将 span 输出到 li 中?

html - Div 溢出到窗口顶部