2016-09-21 1 views
0

Ich habe eine Notebook-Zelle, die JavaScript-Code enthält, und ich möchte, dass der Code diese bestimmte Zelle auswählt. Leider hängt das Verhalten von get_selected_cell davon ab, ob ich die Zelle an Ort und Stelle ausführen oder die Zelle unten ausführen und auswählen.Wie wähle ich die aktuelle Zelle mit JavaScript in Jupyter?

Beispiel:

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

Wenn diese Zelle ausgeführt wird, wird die Ausgabe der Konsole unterschiedlich sein, ob I mit Ctrl+Enter oder Shift+Enter auszuführen. In einem Fall protokolliert es den Index der Zelle, die den JavaScript-Code enthält, in der anderen den Index der Zelle darunter.

Gibt es eine Möglichkeit, die gewünschte Zelle auszuwählen?

+1

'selected_cell' bedeutet das, das in der Benutzeroberfläche ausgewählt ist. Innerhalb von Javascript, das dem Ausgabebereich einer Zelle hinzugefügt wird, ist 'dies' der Ausgabebereich. Ich kann jedoch derzeit keinen Weg zurück zu der Zelle finden, zu der es gehört. –

+0

@ThomasK danke, ich denke es ist nicht möglich dann ... – IanS

+1

Ich vermute, dass es wahrscheinlich ist mit einigen verschachtelten JS Hacker, aber ich weiß nicht wie. Fühlen Sie sich frei, um eine Feature-Anfrage auf dem [Notebook Repo] (https://github.com/jupyter/notebook) für eine offizielle Möglichkeit zu öffnen, die Zelle von JS-Ausgabe zu verweisen. –

Antwort

2

Ihr Javascript wird einen Griff auf der OutputArea haben, die Javascript anwendet, aber nicht einen ganzen Weg zur Zelle (im Allgemeinen können Ausgabebereiche ohne Zellen oder Notizbücher verwendet werden). Sie können die Zelle finden, indem das übergeordnete .cell Element zu identifizieren, und dann die Zelle immer zu diesem Element entsprechen:

%%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

Danke, ich hatte es mit 'element' anstatt mit' this' versucht. Das funktioniert wie ein Zauber ... – IanS

Verwandte Themen