2016-09-21 1 views
0

У меня есть блокнот с кодом JavaScript, и я бы хотел, чтобы код выбирал эту конкретную ячейку. К сожалению, поведение get_selected_cell зависит от того, выполняю ли я ячейку на месте или выполняю и выбираю ячейку ниже.Как выбрать текущую ячейку с JavaScript в Jupyter?

Пример:

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

При выполнении этой ячейки, вывод на консоль будет отличаться выполнять ли я с Ctrl+Enter или Shift+Enter. В одном случае он регистрирует индекс ячейки, который содержит код JavaScript, а в другом - индекс ячейки ниже.

Есть ли способ выбрать ячейку, которую я хочу?

+1

'selected_cell' означает тот, который выбран в пользовательском интерфейсе. В Javascript, добавленном в область вывода ячейки, 'this' является областью вывода. В настоящее время я не могу найти пути назад к той ячейке, к которой она принадлежит. –

+0

@ThomasK спасибо, я думаю, это невозможно ... – IanS

+1

Я подозреваю, что это возможно с некоторым запутанным хакером JS, но я не знаю, как это сделать. Не стесняйтесь открывать запрос функции на [notebook repo] (https://github.com/jupyter/notebook) для официального способа ссылки на ячейку с выхода JS. –

ответ

2

Ваш Javascript будет иметь дескриптор на OutputArea, применяя Javascript, но не весь путь к ячейке (в общем, области вывода могут использоваться без ячеек или ноутбуков). Вы можете найти клетку путем определения родительского элемента .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); 
+0

Спасибо, я попробовал с 'element' вместо' this'. Это работает как шарм ... – IanS