Javascript Jupyter Notebook如何获取代码单元格内容?

时间:2017-03-13 20:46:17

标签: javascript jquery dom jupyter-notebook jupyter

(有一个类似的问题here,但它是关于使用python代码来读取markdown单元格。我想使用JavaScript(例如在Jupyter Notebook前端扩展中)来读取代码中的源代码细胞。)

我想对代码进行分析。但是,如果我只是检查一个Jupyter笔记本的DOM,它就会成为嵌套div的真正DOM梦魇(可能有一半是多余的):

enter image description here

正如我们在这里看到的,源代码的每个字符都在它自己的元素中。当然,我并不是非常希望从标签中提取所有内容并再次连接它以获取代码单元的代码。有没有简单的方法来获取单元格的源代码?

也许有些Jupyter JS API函数? (笔记本本身如何实际获取它发送给内核的代码?应该有一些东西已经完成这项工作。)或者一些jQuery代码,它非常聪明地获取所有内容?

我能想到的一个替代方案是在内核在后端评估它之前以某种方式拦截代码单元格内容,但我还不知道如何做到这一点,它需要输出HTML,其中包含JS和在运行时,在代码单元的输出中立即执行函数。如果我希望实际代码的输出代码单元输出中的代码分析输出,这也可能变得复杂。也许它没有我想象的那么复杂,但到目前为止,如果有一些简单的方法可以获得它,那么在JS方面获取代码似乎更好......

1 个答案:

答案 0 :(得分:5)

查看Juypter cell.js文件here - 它列出了Jupyter本身用于与单元格交互的函数。特别是,函数get_text()将返回单元格的内容。 (这适用于所有类型的单元格 - 只查看codecell.js文件中的特定于代码单元格的函数)

在浏览器中测试此功能的快捷方法 - 访问全局Jupyter对象的notebook实例以获取笔记本的第一个单元格:

var cell = Jupyter.notebook.get_cell(0);

现在我们有了单元格 - 我们可以读取其中的代码!使用:

var code = cell.get_text();