【问题标题】:How to select current cell with JavaScript in Jupyter?如何在 Jupyter 中使用 JavaScript 选择当前单元格?
【发布时间】:2016-09-21 10:20:53
【问题描述】:

我有一个包含 JavaScript 代码的笔记本单元格,我想要代码来选择这个特定的单元格。不幸的是,get_selected_cell 的行为取决于我是在原地执行单元格,还是执行并选择下面的单元格。

示例:

%%javascript
var cell = Jupyter.notebook.get_selected_cell();
console.log(Jupyter.notebook.find_cell_index(cell));

执行此单元格时,无论我使用Ctrl+Enter 还是Shift+Enter 执行,控制台输出都会有所不同。在一种情况下,它记录包含 JavaScript 代码的单元格的索引,在另一种情况下记录下面的单元格的索引。

有没有办法选择我想要的单元格?

【问题讨论】:

  • selected_cell 表示在 UI 中选择的那个。在 Javascript 中添加到单元格的输出区域,this 是输出区域。不过,我目前找不到从那里返回到它所属单元格的方法。
  • @ThomasK 谢谢,我想那是不可能的......
  • 我怀疑可能有一些复杂的 JS 黑客,但我不知道如何。随意在notebook repo 上打开功能请求,以获得从 JS 输出引用单元格的官方方式。

标签: javascript ipython jupyter jupyter-notebook


【解决方案1】:

您的 Javascript 将在应用 Javascript 的 OutputArea 上有一个句柄,但不是一直到单元格的句柄(通常,输出区域可以在没有单元格或笔记本的情况下使用)。您可以通过识别父元素.cell 找到该单元格,然后获取该元素对应的单元格:

%%javascript
var output_area = this;
// find my cell element
var cell_element = output_area.element.parents('.cell');
// which cell is it?
var cell_idx = Jupyter.notebook.get_cell_elements().index(cell_element);
// get the cell object
var cell = Jupyter.notebook.get_cell(cell_idx);

【讨论】:

    【解决方案2】:

    在使用display(HTML("javascript code")) 执行javascript 的情况下,this 将返回Window 对象。

    所以你应该使用display(Javascript("javascript code")) 来获取当前单元格的输出区域。

    【讨论】:

      【解决方案3】:

      如果您正在编写一个 jupyter 实验室小部件,您可以通过迭代 widget 数组来获取单元格索引。这就是 jupyter 实验室内部所做的 (source)。

      const cellIndex = ArrayExt.findFirstIndex(
        notebook.content.widgets,
        widget => widget.node === this.originalCell.node
      );
      

      然后您可以通过更改笔记本小部件的activeCellIndex 属性来分配新的活动单元格:

      notebook.content.activeCellIndex = cellIndex;
      

      【讨论】:

      • 我一直无法按照您说明的方式从 Jupyter 小部件中访问 notebook 对象。能否提供更完整的样本?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多