App:ページにtextarea要素があります。それをインデントしてhtmlコードを強調表示する必要があるため、CodeMirrorを使用して変換されます。 Picはリンクにあります:[codemirrorを使用したtextarea]
http://uploadingit.com/file/gxftd2cps9wm7zhp/cm.png
Codemirrorを使用したtextareaのコードは次のとおりです。
</textarea>
<button type="submit">Post</button>
</form>
<script>
var editor = CodeMirror.fromTextArea(document.getElementById("code"), {
mode: { name: "xml", htmlMode: true },
lineNumbers: true,
tabMode: "indent",
matchBrackets: true,
path: 'js/',
searchMode: 'inline',
onCursorActivity: function () {
editor.setLineClass(hlLine, null);
hlLine = editor.setLineClass(editor.getCursor().line, "activeline");
}
});
var hlLine = editor.setLineClass(0, "activeline");
</script>
それを行う方法?:[投稿]ボタンをクリックすると、すべてのコードが別のテキストエリアに送信されます。私はこれをjavascriptまたはjQueryで行う必要がありますが、それを行う方法に苦労しています。何か助けは?
現実のアプリの場合、このテキストエリアのコード(上記の写真から)はHtml Designer APIに影響を与えるはずです。つまり、Htmlデザイナでの変更は、このテキスト領域(読みやすくするためにコードミラーを使用した)とその逆に反映される必要があります。 textareaで編集すると、変更はHtmlDesignerに反映されますが、このシミュレーションの場合は、2番目のtextareaです。
例:デザイナ+ソースモードを備えたVisual Studio .Net WebPageコードエディタのように。今では明らかですか?
JavaScriptまたはjqueryを使用して上記のメカニズムを実装する方法を質問しています。どうもありがとうございました!
次のようなonChangeオプションをCodeMirrorに渡します。
_onChange: function (cm) {
mySecondTextArea.value = cm.getValue();
}
_
注を編集:CodeMirrorバージョン2.0以降、変更ハンドラを登録するためにonChange
オプションを渡す必要はなくなりましたが、代わりにinstance.on("change", function(cm, change) { ... })
を呼び出します。 http://codemirror.net/doc/manual.html#event_change
現時点で最後にリリースされたバージョン(v 3.15)はこのソリューションで動作します。
// on and off handler like in jQuery
CodemirrorInstance.on('change',function(cMirror){
// get value right from instance
yourTextarea.value = cMirror.getValue();
});
これは、CodeMirror 5.22.0で機能します。
CodeMirror.fromTextArea(document.getElementById('grammar'), {
lineNumbers: true,
mode: 'pegjs',
}).on('change', editor => {
console.log(editor.getValue());
});
コードミラーでのonChange処理は次のようなものではありません。
onChange: function(cm) { mySecondTextArea.value = cm.getValue(); }
あなたが使用する必要があります:
$.fn.buildCodeMirror = function(){
var cmOption {...};
var cm = CodeMirror($("MyDomObjectSelector")[0],cmOption);
cm.on("change",$.fn.cmChange);
}
$.fn.cmChange = function(cm,cmChangeObject){
alert("code mirror content has changed");
}
つまり、あるTextArea(ちなみにinput
コントロールとしてレンダリングされます)から別のTextAreaにテキストをコピーしたいですか?
//Set the button to call a Javascript function when it is clicked
<button type="submit" onclick="copyText();">Post</button>
<script type="text/javascript">
function copyText() {
//Get the text in the first input
var text = document.getElementById("firstTextArea").getValue();
//Can't use .value here as it returns the starting value of the editor
//Set the text in the second input to what we copied from the first
document.getElementById("secondTextArea").value = text;
}
</script>
あなたはこれを使うことができます...
_var editor_js = CodeMirror.fromTextArea(document.getElementById("js"), {
mode: 'text/javascript',
theme: 'icecoder',
styleActiveLine: true,
lineNumbers: true,
lineWrapping: true,
});
_
editor_js.getValue()
でデータを取得する