0

Code Mirror を使用してコード プレイグラウンドを構築しています。私の問題は、html、css、および js 用に持っている textarea 要素からコンテンツを取得できないことです。テキストエリアからコンテンツを取得するためのコードに問題があるかどうかを確認するために、これらのテキストエリア要素とは別にテキストエリアを作成しました。私のhtmlには、もちろんテキストエリアタグがあります。この新しいテキストエリアに「txtb」というクラス名を付け、「AlertContent()」という関数の onclick 属性を持つリンクを作成しました。関数の JavaScript は次のとおりです。

function AlertContent(){

alert(document.getElementsByClassName('txtb')[0].value);  

}

何を推測すると、それは機能します。クラス「txtb」を持つテキストエリア要素に入力し、作成した関数 AlertContent() を呼び出すリンクをクリックすると、そのテキストエリアに入力したテキストを表示するメッセージ ボックスが表示されます。できます。ただし、Code Mirror で使用している textarea 要素にクラスを指定し、同じ関数を使用してそれらの textarea 要素から値またはコンテンツを取得しようとすると、テキスト (html 、css、js) をこれらの textarea 要素に含めます。私がやりたいことは、textarea 要素 (html、css、js) のコンテンツを取得する関数を作成して、データベースに保存できるようにすることだけです。本当に助かります。Code Mirror で使用しているコードは次のとおりです。

<!-- Code Editors -->
<section id="code_editors">
<div id="html" class="code_box">
<h3>HTML</h3>
<form><textarea class="MyHtml" name="htmlcode"></textarea></form>
</div>
<div id="css" class="code_box">
<h3>CSS</h3>
<textarea class="MyCss" name="css"></textarea>
</div>
<div id="js" class="code_box">
<h3>JavaScript</h3>
<textarea class="MyJs" name="js"></textarea>
</div>
</section>
</div>
<script src="http://codemirror.net/lib/codemirror.js"></script>
<!-- For HTML/XML -->
<script src="http://codemirror.net/mode/xml/xml.js"></script>
<script src="http://codemirror.net/mode/htmlmixed/htmlmixed.js"></script>
<!-- For CSS -->
<script src="http://codemirror.net/mode/css/css.js"></script>
<!-- For JS -->
<script src="http://codemirror.net/mode/javascript/javascript.js"></script>
</div> 
</div> 

<script>    
(function() {

// Base template
var base_tpl =
"<!doctype html>\n" +
"<html>\n\t" +
"<head>\n\t\t" +
"<meta charset=\"utf-8\">\n\t\t" +
"<title>Test</title>\n\n\t\t\n\t" +
"</head>\n\t" +
"<body>\n\t\n\t" +
"</body>\n" +
"</html>";

 var prepareSource = function() {
 var html = html_editor.getValue(),
 css = css_editor.getValue(),
 js = js_editor.getValue(),
 src = '';
 // HTML
 src = base_tpl.replace('</body>', html + '</body>');

 // CSS
 css = '<style>' + css + '</style>';
 src = src.replace('</head>', css + '</head>');
 // Javascript
 js = '<script>' + js + '<\/script>';
 src = src.replace('</body>', js + '</body>');
 return src;
 };
 var render = function() {
 var source = prepareSource();
 var iframe = document.querySelector('#output iframe'),
 iframe_doc = iframe.contentDocument;
 iframe_doc.open();
 iframe_doc.write(source);
 iframe_doc.close();
 };
 // EDITORS
 // CM OPTIONS
 var cm_opt = {
 mode: 'text/html',
 gutter: true,
 lineNumbers: true,
 };
 // HTML EDITOR
 var html_box = document.querySelector('#html textarea');
 var html_editor = CodeMirror.fromTextArea(html_box, cm_opt);

 html_editor.on('change', function (inst, changes) {
 render();
 });

 // CSS EDITOR
 cm_opt.mode = 'css';
 var css_box = document.querySelector('#css textarea');
 var css_editor = CodeMirror.fromTextArea(css_box, cm_opt);

 css_editor.on('change', function (inst, changes) {
 render();
 });

 // JAVASCRIPT EDITOR
 cm_opt.mode = 'javascript';
 var js_box = document.querySelector('#js textarea');
 var js_editor = CodeMirror.fromTextArea(js_box, cm_opt);

 js_editor.on('change', function (inst, changes) {
 render();
 });

 // SETTING CODE EDITORS INITIAL CONTENT
 html_editor.setValue('<p>Empty Room</p>');
 css_editor.setValue('body { color: gray; }');
 // RENDER CALL ON PAGE LOAD
 // NOT NEEDED ANYMORE, SINCE WE RELY
 // ON CODEMIRROR'S onChange OPTION THAT GETS
 // TRIGGERED ON setValue
 // render();
 // NOT SO IMPORTANT - IF YOU NEED TO DO THIS
 // THEN THIS SHOULD GO TO CSS
 /*
 Fixing the Height of CodeMirror.
 You might want to do this in CSS instead
 of JS and override the styles from the main
 codemirror.css
*/
 var cms = document.querySelectorAll('.CodeMirror');
 for (var i = 0; i < cms.length; i++) {
 cms[i].style.position = 'absolute';
 cms[i].style.top = '30px';
 cms[i].style.bottom = '0';
 cms[i].style.left = '0';
 cms[i].style.right = '0';
 cms[i].style.height = '100%';
 }
 /*cms = document.querySelectorAll('.CodeMirror-scroll');
 for (i = 0; i < cms.length; i++) {
 cms[i].style.height = '100%';
 }*/
 }());
 // Basically adding to the CM Options
 cm_opt['extraKeys'] = {
 Tab: function(instance) {
 if (inst.somethingSelected())
 CodeMirror.commands.indentMore(inst);
 else
 CodeMirror.commands.insertTab(inst);
 }
 }
 </script>
4

1 に答える 1

1

get_value()エディタで提供されているを使用してみませんか? 例えば、html_editor.getValue()

これは、それぞれのエディターのボタンをクリックしたときに、CodeMirror テキスト領域に何を書いたかを警告するためのページの例です。

<!DOCTYPE html>
<html>
<head>
    <title>CodeMirror</title>
    <link rel="stylesheet" href="http://codemirror.net/lib/codemirror.css">
</head>
<body>
    <!-- Code Editors -->
    <section id="code_editors">
        <div id="html" class="code_box">
            <h3>HTML</h3>
            <form><textarea class="MyHtml" name="htmlcode"></textarea></form>
            <button onclick="viewHTML()">Alert this HTML</button>
        </div>
        <div id="css" class="code_box">
            <h3>CSS</h3>
            <textarea class="MyCss" name="css"></textarea>
            <button onclick="viewCSS()">Alert this CSS</button>
        </div>
        <div id="js" class="code_box">
            <h3>JavaScript</h3>
            <textarea class="MyJs" name="js"></textarea>
            <button onclick="viewJS()">Alert this JS</button>
        </div>
    </section>

    <div id="output">
        <iframe></iframe>
    </div>

    <script src="http://codemirror.net/lib/codemirror.js"></script>
    <!-- For HTML/XML -->
    <script src="http://codemirror.net/mode/xml/xml.js"></script>
    <script src="http://codemirror.net/mode/htmlmixed/htmlmixed.js"></script>
    <!-- For CSS -->
    <script src="http://codemirror.net/mode/css/css.js"></script>
    <!-- For JS -->
    <script src="http://codemirror.net/mode/javascript/javascript.js"></script>

    <script>    
    (function() {
        // Base template
        var base_tpl =
        "<!doctype html>\n" +
        "<html>\n\t" +
        "<head>\n\t\t" +
        "<meta charset=\"utf-8\">\n\t\t" +
        "<title>Test</title>\n\n\t\t\n\t" +
        "</head>\n\t" +
        "<body>\n\t\n\t" +
        "</body>\n" +
        "</html>";

        window.viewHTML = function() {
            alert(html_editor.getValue());
        }

        window.viewCSS = function() {
            alert(css_editor.getValue());
        }

        window.viewJS = function() {
            alert(js_editor.getValue());
        }

        var prepareSource = function() {
            var html = html_editor.getValue(),
                css = css_editor.getValue(),
                js = js_editor.getValue(),
                src = '';

            // HTML
            src = base_tpl.replace('</body>', html + '</body>');

            // CSS
            css = '<style>' + css + '</style>';
            src = src.replace('</head>', css + '</head>');

            // Javascript
            js = '<script>' + js + '<\/script>';
            src = src.replace('</body>', js + '</body>');

            return src;
        };

        var render = function() {
            var source = prepareSource();
            var iframe = document.querySelector('#output iframe'),
            iframe_doc = iframe.contentDocument;

            iframe_doc.open();
            iframe_doc.write(source);
            iframe_doc.close();
        };

        // EDITORS
        // CM OPTIONS
        var cm_opt = {
            mode: 'text/html',
            gutter: true,
            lineNumbers: true,
        };

        // HTML EDITOR
        var html_box = document.querySelector('#html textarea');
        var html_editor = CodeMirror.fromTextArea(html_box, cm_opt);

        html_editor.on('change', function (inst, changes) {
            render();
        });

        // CSS EDITOR
        cm_opt.mode = 'css';
        var css_box = document.querySelector('#css textarea');
        var css_editor = CodeMirror.fromTextArea(css_box, cm_opt);

        css_editor.on('change', function (inst, changes) {
            render();
        });

        // JAVASCRIPT EDITOR
        cm_opt.mode = 'javascript';
        var js_box = document.querySelector('#js textarea');
        var js_editor = CodeMirror.fromTextArea(js_box, cm_opt);

        js_editor.on('change', function (inst, changes) {
            render();
        });

        // SETTING CODE EDITORS INITIAL CONTENT
        html_editor.setValue('<p>Empty Room</p>');
        css_editor.setValue('body { color: gray; }');
        js_editor.setValue('var x = \'10\';');
        // RENDER CALL ON PAGE LOAD
        // NOT NEEDED ANYMORE, SINCE WE RELY
        // ON CODEMIRROR'S onChange OPTION THAT GETS
        // TRIGGERED ON setValue
        // render();
        // NOT SO IMPORTANT - IF YOU NEED TO DO THIS
        // THEN THIS SHOULD GO TO CSS
        /*
        Fixing the Height of CodeMirror.
        You might want to do this in CSS instead
        of JS and override the styles from the main
        codemirror.css
        */
        /*
        var cms = document.querySelectorAll('.CodeMirror');
        for (var i = 0; i < cms.length; i++) {
            cms[i].style.position = 'absolute';
            cms[i].style.top = '30px';
            cms[i].style.bottom = '0';
            cms[i].style.left = '0';
            cms[i].style.right = '0';
            cms[i].style.height = '100%';
        }
        */
        /*cms = document.querySelectorAll('.CodeMirror-scroll');
        for (i = 0; i < cms.length; i++) {
            cms[i].style.height = '100%';
        }*/

        // Basically adding to the CM Options
        cm_opt['extraKeys'] = {
            Tab: function(instance) {
            if (inst.somethingSelected())
                CodeMirror.commands.indentMore(inst);
            else
                CodeMirror.commands.insertTab(inst);
            }
        }
    }());

    </script>
</body>
</html>
于 2013-09-24T20:35:48.660 に答える