如何按原样复制文本区域的值(使用 \n 和所有这些东西)?
How to copy the value of the textarea as it is (with \n and all this stuff)?
我有以下 laravel 表单,我想从代码编辑器中复制文本:
<style type="text/css" media="screen">
#editor {
position: absolute;
top: 150px;
right: 150px;
bottom: 150px;
left: 150px;
}
.ace_editor {
border: 1px solid lightgray;
margin: auto;
height: 65%;
width: 55%;
}
.scrollmargin {
height: 80px;
text-align: center;
}
</style>
{!! Form::open(['action' => 'ProblemsController@store']) !!}
<div id="editor"></div>
<input type="textarea" name="codeSrc" id="codeSrc" style="display: none;">
{{Form::submit('Submit')}}
{!! Form::close() !!}
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.3.3/ace.js" type="text/javascript" charset="utf-8"></script>
<script>
var editor = ace.edit("editor");
editor.setTheme("ace/theme/chrome");
editor.session.setMode("ace/mode/c_cpp");
//here I am taking the text from the hidden textarea
editor.session.on('change', function(delta) {
var content=document.getElementById('hiddenInput');
content.value=editor.getValue();
});
</script>
我想按原样接受文本输入,就像这样:
// Your First C++ Program
#include <iostream>
int main() {
std::cout << "Hello World!";
return 0;
}
不是像那样在一行中,只是忽略了 \n // Your First C++ Program#include int main() {std::cout << "Hello World!";return 0;}
甚至 <iostream>
也消失了,因为它被解释为 html 标签。这样做的目的是将其传输到.cpp文件并执行它,所以我希望它保持原样,而不是修改。
我设法解决了这个问题。所以:
editor.getValue()
应替换为 editor.getSession.getValue()
,它将 return 文本原样写入(换行)。 content.value
另一方面它将 return 单行文本,所以我们需要从这个改变:
editor.session.on('change', function(delta) {
var content=document.getElementById('hiddenInput');
content.value=editor.getValue();
});
对此:
editor.session.setNewLineMode("auto");
editor.getSession().on("change", function () {
document.getElementById('codeSrc').value =
editor.getSession().getValue().replace(/\r\n|\n|\r/g, '<br/>');
console.log(editor.getSession().getValue());
});
就这些了。
我有以下 laravel 表单,我想从代码编辑器中复制文本:
<style type="text/css" media="screen">
#editor {
position: absolute;
top: 150px;
right: 150px;
bottom: 150px;
left: 150px;
}
.ace_editor {
border: 1px solid lightgray;
margin: auto;
height: 65%;
width: 55%;
}
.scrollmargin {
height: 80px;
text-align: center;
}
</style>
{!! Form::open(['action' => 'ProblemsController@store']) !!}
<div id="editor"></div>
<input type="textarea" name="codeSrc" id="codeSrc" style="display: none;">
{{Form::submit('Submit')}}
{!! Form::close() !!}
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.3.3/ace.js" type="text/javascript" charset="utf-8"></script>
<script>
var editor = ace.edit("editor");
editor.setTheme("ace/theme/chrome");
editor.session.setMode("ace/mode/c_cpp");
//here I am taking the text from the hidden textarea
editor.session.on('change', function(delta) {
var content=document.getElementById('hiddenInput');
content.value=editor.getValue();
});
</script>
我想按原样接受文本输入,就像这样:
// Your First C++ Program
#include <iostream>
int main() {
std::cout << "Hello World!";
return 0;
}
不是像那样在一行中,只是忽略了 \n // Your First C++ Program#include int main() {std::cout << "Hello World!";return 0;}
甚至 <iostream>
也消失了,因为它被解释为 html 标签。这样做的目的是将其传输到.cpp文件并执行它,所以我希望它保持原样,而不是修改。
我设法解决了这个问题。所以:
editor.getValue()
应替换为 editor.getSession.getValue()
,它将 return 文本原样写入(换行)。 content.value
另一方面它将 return 单行文本,所以我们需要从这个改变:
editor.session.on('change', function(delta) {
var content=document.getElementById('hiddenInput');
content.value=editor.getValue();
});
对此:
editor.session.setNewLineMode("auto");
editor.getSession().on("change", function () {
document.getElementById('codeSrc').value =
editor.getSession().getValue().replace(/\r\n|\n|\r/g, '<br/>');
console.log(editor.getSession().getValue());
});
就这些了。