【问题标题】:Scrolling first occurence to top position inside div将第一次出现滚动到 div 内的顶部位置
【发布时间】:2019-04-15 12:55:32
【问题描述】:

点击导航到另一个页面的链接后,我必须滚动“tbody” div 顶部的第一个(最早的)警报事件(标记为红色文本)。每行都有id='tab_content' 和一个表数据class = 'td_list_row_center'。当警报发生时,tds 的颜色会从黑色变为红色,并且名称为class = 'td_list_row_center font-red"

我已尝试处理红色事件,如果发现,请在“tbody”div 的顶部滚动。第二行应为黑色字体(非报警)

<script>
    function scrollToFirstRedAlarmOccurence(red_occurrence) {
        $('tbody').animate({
            scrollTop: red_occurrence.offset().top
        }, 2000);
    }

    var red_occurrence = document.getElementsByClassName("td_list_row_center font-red");

    if(red_occurrence)
        scrollToFirstRedAlarmOccurence(red_occurrence);
    else
        null
</script>

点击链接并显示表格后,没有任何反应(如脚本不起作用)。我希望它从一个巨大的数据集中滚动到第一个红色事件。在我向上滚动表格后,我会看到另一个后来的红色事件。实际和预期结果如下图:

[实际资源] -> https://ibb.co/1zn4ty9
[预期结果] -> https://ibb.co/Jy6FrL6

【问题讨论】:

标签: javascript html


【解决方案1】:

“getElementsByClassName”的参数不正确。如下使用它们。

<script>
  function scrollToFirstRedAlarmOccurence(red_occurrence) {
    // make jQuery object for first element
    $('tbody').animate({
      scrollTop: $(red_occurrence[0]).offset().top,
    }, 2000);
  }
  setTimeout(() => {
    // select "font-red" classed elements
    var red_occurrence = document.getElementsByClassName("font-red"); // you can use jQuery selector too
    if(red_occurrence.length) { // check for array length
      scrollToFirstRedAlarmOccurence(red_occurrence);
    }
  }, 1000); // wait for DOM to render
</script>

基本上,您可以调试代码以检查它们是否获得正确的值。我做了一些更正,这对你的情况有用。

【讨论】:

  • 好的,我使用了您修改后的代码,但它不起作用。现在我必须等到所有数据都加载完毕,然后必须滚动到 red_occurence 数组的最后一个元素。我刚刚做了一个简单的修改。 \nsetTimeout(() =&gt; { var red_occurrence = document.getElementsByClassName("font-red"); var first_red_occurrence = red_occurrence[red_occurrence.length-1]; scrollToFirstRedAlarmOccurrence(first_red_occurrence); }, 10000);
  • 修改后的解决方案有效吗?我看到你正在等待 10 秒。我假设有一个 AJAX 调用,并且这些 DOM 元素在其成功响应后生成。如果是这样,我建议在成功处理程序下添加这些检查。这样,即使 AJAX 调用花费的时间超出预期,您也可以确保您的代码能够正常工作。
  • 不,我修改的代码不起作用。我不太了解 AJAX。你能告诉我这里link的代码有什么问题吗?我想在加载所有数据后保存 first_red_occurrence。 console.log 的结果显示 first_red_occurrence 指向最后一个元素,但 console.log 运行多次(运行次数等于行数?)。
  • 如您所见,Firefox 控制台中的最后一个元素指向最早的警报信号,该行应显示在 tbody 的顶部。 link
  • 好的,一切都像魅力一样 :) 感谢 Sujit 的精彩提示!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多