我正在使用代碼鏡像構建代碼遊樂場。我的問題是,我無法從html,css和js的textarea元素中獲取內容。除了textarea元素之外,我還創建了一個textarea,以查看從textarea獲取內容的代碼是否有問題。所以在我的html中,當然我有textarea標籤。我給了這個新的textarea一個類名「txtb」,並且我爲一個叫做「AlertContent()」的函數創建了一個onclick屬性的鏈接。 這裏是JavaScript的功能:需要幫助弄清楚爲什麼我無法使用Javascript爲我的代碼操場獲取某個textarea元素的內容
function AlertContent(){
alert(document.getElementsByClassName('txtb')[0].value);
}
並猜測它是什麼,它的工作原理。當我輸入具有類「txtb」的textarea元素,然後單擊調用我創建的函數AlertContent()的鏈接時,我看到一個消息框出現,顯示我輸入到該textarea中的文本。有用。然而,當我嘗試給我使用的代碼鏡像的textarea元素的類,並使用相同的功能從這些textarea元素獲取值或內容時,我最終得到一個空白的消息框,即使有文本(HTML ,CSS,JS)在這些textarea元素。我想要做的就是創建一個函數,它將獲取textarea元素(html,css,js)的內容,然後將其保存到我的數據庫中。我真的很感謝幫助。這是我用於代碼鏡像的代碼。
<!-- 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>
我想CodeMirror並沒有真正使用原始的textareas,而是用其他HTML內容取代它們,以便能夠實現它的所有功能。例如,您不能在常規textarea中使用不同顏色的文本。 –