如何让 javascript 处理 'ESCAPE(\u001B)' 字符?
How to make javascript handle 'ESCAPE(\u001B)' character?
我想制作为 Windows 10 命令提示符生成代码的网站,它支持 'ESCAPE'(\u001B) 字符样式字符串。
您可以在 HERE.
上查看示例
注意:由于该站点无法正确显示 ``(\u001B),我将使用 ←
代替。
问题是,当我尝试编写代码来为命令提示符编写代码时,如下所示:
function cdGenerate() {
var input = document.getElementById('ipText').value;
console.log(`input: ${input}`);
input = checkStyle(input);
console.log(`checkStyle input : ${input}`);
input = checkForeground(input);
console.log(`checkForeground input : ${input}`);
input = checkBackground(input);
console.log(`checkBackground input : ${input}`);
str = input;
console.log(`str: ${str}`);
document.getElementById('spResult').innerHTML = `<code>${str}</code>`;
copy(str);
}
function checkStyle(ori) {
var rtb = '←[';
if (document.getElementById('g-style-reset').checked) { rtb += '0;' }
if (document.getElementById('g-style-bold').checked) { rtb += '1;' }
if (document.getElementById('g-style-underline').checked) { rtb += '4;' }
if (document.getElementById('g-style-inverse').checked) { rtb += '7;' }
rtb = rtb.slice(0, -1);
rtb += 'm';
var rtn = rtb.concat(ori);
return rtn;
}
结果不是我想要的
我在ipText
中输入了TEST
HTML输入元素并执行了cdGenerate()
,我应该得到的是←[7mTEST
中的东西ipResult
] HTML 输入元素。但是我只能得到TEST
,不能得到←[7mTEST
。
我用 ←
而不是 \u001B
测试了这些代码,没有任何改变。
此外,我需要将那些 ←[7mTEST
复制到用户的剪贴板。
如何使我的 javascript 代码能够正确地(按原样)处理 ←
(\u001B)?
好的。我找到了方法。
- 我需要展示'ESCAPE'个角色
我决定改为显示
←
。并向 <input>
'DO NOT COPY THIS TEXT' 添加评论之类的东西。所有内部函数都使用 ←
而不是 'ESCAPE' 因为我只在复制到剪贴板时才需要它。
- 我需要复制'ESCAPE'个字符
将字符串复制到
<input>
后,将 ←
转换为 'ESCAPE' 时使用相同的变量。我使用 hidden <div>
粘贴字符串(包括 'ESCAPE')并将其复制到剪贴板。如果使用<input>
,'ESCAPE'字符没有被正确复制,所以我使用<div>
。无论如何,<div>
的内容在将其内容复制到剪贴板后被清除。
function copyToClipboard(string) {
$id('hide').innerHTML = string;
var temp = document.createElement('input');
document.body.appendChild(temp);
temp.setAttribute('value', string);
temp.select();
document.execCommand('copy');
document.body.removeChild(temp);
}
我希望我的解决方法能帮助其他遇到同样问题的人。
我想制作为 Windows 10 命令提示符生成代码的网站,它支持 'ESCAPE'(\u001B) 字符样式字符串。
您可以在 HERE.
注意:由于该站点无法正确显示 ``(\u001B),我将使用 ←
代替。
问题是,当我尝试编写代码来为命令提示符编写代码时,如下所示:
function cdGenerate() {
var input = document.getElementById('ipText').value;
console.log(`input: ${input}`);
input = checkStyle(input);
console.log(`checkStyle input : ${input}`);
input = checkForeground(input);
console.log(`checkForeground input : ${input}`);
input = checkBackground(input);
console.log(`checkBackground input : ${input}`);
str = input;
console.log(`str: ${str}`);
document.getElementById('spResult').innerHTML = `<code>${str}</code>`;
copy(str);
}
function checkStyle(ori) {
var rtb = '←[';
if (document.getElementById('g-style-reset').checked) { rtb += '0;' }
if (document.getElementById('g-style-bold').checked) { rtb += '1;' }
if (document.getElementById('g-style-underline').checked) { rtb += '4;' }
if (document.getElementById('g-style-inverse').checked) { rtb += '7;' }
rtb = rtb.slice(0, -1);
rtb += 'm';
var rtn = rtb.concat(ori);
return rtn;
}
结果不是我想要的
我在ipText
中输入了TEST
HTML输入元素并执行了cdGenerate()
,我应该得到的是←[7mTEST
中的东西ipResult
] HTML 输入元素。但是我只能得到TEST
,不能得到←[7mTEST
。
我用 ←
而不是 \u001B
测试了这些代码,没有任何改变。
此外,我需要将那些 ←[7mTEST
复制到用户的剪贴板。
如何使我的 javascript 代码能够正确地(按原样)处理 ←
(\u001B)?
好的。我找到了方法。
- 我需要展示'ESCAPE'个角色
我决定改为显示
←
。并向<input>
'DO NOT COPY THIS TEXT' 添加评论之类的东西。所有内部函数都使用←
而不是 'ESCAPE' 因为我只在复制到剪贴板时才需要它。 - 我需要复制'ESCAPE'个字符
将字符串复制到
<input>
后,将←
转换为 'ESCAPE' 时使用相同的变量。我使用 hidden<div>
粘贴字符串(包括 'ESCAPE')并将其复制到剪贴板。如果使用<input>
,'ESCAPE'字符没有被正确复制,所以我使用<div>
。无论如何,<div>
的内容在将其内容复制到剪贴板后被清除。
function copyToClipboard(string) {
$id('hide').innerHTML = string;
var temp = document.createElement('input');
document.body.appendChild(temp);
temp.setAttribute('value', string);
temp.select();
document.execCommand('copy');
document.body.removeChild(temp);
}
我希望我的解决方法能帮助其他遇到同样问题的人。