我有一个简单的文本区域,我需要制作透明字母,同时允许文本插入符号可见。当我应用以下规则时,我会得到隐形插入符号:
textarea {
background: transparent;
opacity: 0;
}
当我输入不可见的文本时,我需要看到文本插入符号的移动。
编辑:我需要制作编辑器来编辑表中的 td 单元格。当我单击一个单元格时,我会显示一个文本区域并开始输入。在每个字符字母上,我在单元格中插入一个上下文。之后,我隐藏了一个文本区域。
我有一个简单的文本区域,我需要制作透明字母,同时允许文本插入符号可见。当我应用以下规则时,我会得到隐形插入符号:
textarea {
background: transparent;
opacity: 0;
}
当我输入不可见的文本时,我需要看到文本插入符号的移动。
编辑:我需要制作编辑器来编辑表中的 td 单元格。当我单击一个单元格时,我会显示一个文本区域并开始输入。在每个字符字母上,我在单元格中插入一个上下文。之后,我隐藏了一个文本区域。
这个jsFiddle DEMO使用了一种在线教程方法,该方法经过了轻微修改,可以创建一个非原生 browser text-caret
的透明文本。
此外,我创建的这个jsFiddle 新方法以不同方式处理该目标,但对 IE8 不友好。
状态更新: 我已经改进了上面的 jsFiddle DEMO,这个新版本的标题是:
上面的 jsFiddle 版本现在允许点击文本区域的内部,并且插入符号将尊重点击的位置。这个额外的功能是通过一个很好的问题和答案来实现的。
是时候投入我的 0.02 美元了。
据我了解,这是对这个问题的回答,它有效,又快又脏,所以请随时提出建议。此代码未经测试,但我确实在这里创建了一个工作小提琴:http: //jsfiddle.net/66RXc/
<html>
<head>
<title>Testing</title>
<script type="text/javascript">
<!--
function call(val) {
document.getElementById('result').value += val.charAt(val.length - 1);
document.getElementById('result').value =
document.getElementById('result').value.substr(0, val.length);
document.getElementById('test').value =
document.getElementById('test').value.replace(/[^\^]/g, ' ');
}
-->
</script>
</head>
<body>
<textarea name="textarea" cols="20" rows="5" id="test"
onKeyUp="call(this.value);"></textarea>
<textarea style="display:block" cols="20" rows="5" id="result" disabled>
</textarea>
</body>
</html>
我接近它的方式是每次在文本区域“test”中输入一个字符时,将其复制到隐藏的文本框中,然后用空格替换“test”中除 ^ 之外的所有字符。人物隐藏了,克拉还在。全文仍在另一个框中。您可以使用 display:hidden 而不是 display:block 来隐藏它。
这并不是世界上最好的实现,只是我快速完成的事情。您必须输入一种慢速(~15-20 WPM)才能使其工作。
这是使文本本身透明的 CSS3 解决方案:
将颜色属性设置color: rgba(0,0,0,0);
为文本
唯一的问题是插入符号不可见。我进行了快速搜索,发现插入符号及其样式完全由浏览器支配。因此,我能为您想到的唯一选择是使用 Javascript 在您输入的内容的末尾添加一个模拟插入符号。
我有一个如何做到这一点的想法,但它很混乱,我不会完全称它为理想 - 但是,我会写它以防它有助于进一步别人的想法:
display: none;
(以便它具有实际宽度)white-space: nowrap;
为将其全部放在一行上)<span id="caret">|</span>
(我将在规范的其余部分将其称为插入符号)
position: relative;
(0 + offsetToACTUALCaretPosition)
class="break"
)标记上一行中的最后一个跨度(字符)color: rgba(0,0,0,0);
注意事项:
正如我之前所说,我知道这个解决方案非常粗糙,但它可能会帮助某人想出一个更好的解决方案。
祝你好运!
根据您的编辑,如果您只需要隐藏文本区域,为什么不使用 jQuery$('#your_id').hide();