---
slug: "ace-widget-access-instance"
title: "ACEのエディターインスタンスをHTMLエレメントから再取得する"
description: "Django-ACE で ACE を使ってて、Ctrl + S ( Command + S )で保存のショートカットキーを使いたかった。"
url: "https://www.ytyng.com/blog/ace-widget-access-instance"
publish_date: "2017-09-25T09:42:48Z"
created: "2017-09-25T09:42:48Z"
updated: "2026-02-27T01:17:35.994Z"
categories: ["HTML", "Javascript"]
keywords: ""
featured_image_url: "https://media.ytyng.com/resize/20230812/d5113e0789a2454290f6422e27a6e368.png.webp?width=768"
has_video: false
has_music: false
video_urls: []
music_urls: []
lang: "ja"
---

# ACEのエディターインスタンスをHTMLエレメントから再取得する

<p>Django-ACE で ACE を使ってて、Ctrl + S ( Command + S )で保存のショートカットキーを使いたかった。</p>
<p></p>
<p>Django-ACE は、 widget.js で&nbsp;</p>
<pre>editor = ace.edit(div)</pre>
<p>こんな感じで、editor インスタンスを作ってるけど、function内のローカル変数なので function外からはアクセスできない。</p>
<p></p>
<p>そんな時は、<strong>div.env.editor</strong> に参照があるのでアクセスできる。</p>
<p>Django Admin で ACE を使っている場合、editor への参照へのアクセスを jQuery で書くと</p>
<pre>$('div.django-ace-widget')[0].firstChild.env.editor</pre>
<p>こんな感じ。</p>
<p></p>
<p>Ctrl + S ( Command + S ) のショートカットをバインドするには</p>
<pre>$('div.django-ace-widget')[0].firstChild.env.editor.commands.addCommand({<br />  Name : "save",<br />  bindKey: {<br />    win : "Ctrl-S",<br />    mac : "Command-S"<br /> },<br /> exec: function(editor) {<br />   alert('Save!');<br />   }<br />});</pre>
<p>このように書ける。</p>
<p></p>
<p>Django の Admin 用 JS にするとこんな</p>
<pre><span>// Admin ACE Save<br /></span><span>$</span>(<span>function </span>() {<br />    <span>setTimeout</span>(<span>function </span>() {<br />        <span>var </span><span>aces </span>= <span>$</span>(<span>'</span><span>div</span><span>.</span><span>django-ace-widget</span><span>'</span>);<br />        <span>if </span>(!<span>aces</span>.<span>length</span>) {<br />            <span>return</span>;<br />        }<br />        <span>var </span><span>editor </span>= <span>aces</span>[<span>0</span>].<span>firstChild</span>.<span>env</span>.<span>editor</span>;<br />        <span>if </span>(!<span>editor</span>) {<br />            <span>return</span>;<br />        }<br />        <span>var </span><span>continueButton </span>= <span>$</span>(<span>'</span><span>input</span><span>[</span><span>type</span><span>="submit"][</span><span>name</span><span>="_continue"]'</span>);<br />        <span>if </span>(!<span>continueButton</span>.<span>length</span>) {<br />            <span>return</span>;<br />        }<br /><br />        <span>editor</span>.<span>commands</span>.<span>addCommand</span>({<br />            <span>Name</span>: <span>"save"</span>,<br />            <span>bindKey</span>: {<br />                <span>win</span>: <span>"Ctrl-S"</span>,<br />                <span>mac</span>: <span>"Command-S"<br /></span><span>            </span>},<br />            <span>exec</span>: <span>function </span>(editor) {<br />                <span>continueButton</span>.<span>click</span>();<br />            }<br />        });<br />    }, <span>2000</span>);<br />});</pre>
<p></p>
