【发布时间】:2011-05-06 00:31:11
【问题描述】:
我正在尝试复制 facebook 状态更新的功能,其中帖子中的标签被突出显示。例如,您点击“@”字符,然后自动完成到您喜欢的页面,然后即使您继续输入,该标记的文本也会突出显示。
在深入研究 dom 之后,看起来他们完成了类似于 previous answer 推荐的技术:在文本区域顶部覆盖一个绝对定位的 div,标签由 <b> 和 css 包围以突出显示 @ 987654327@ 覆盖内的标签。他们添加的一个关键调整是在叠加层上使用 color:transparent 以便只显示高光。
这避免了在其自身之上书写的文本的丑陋变暗。请注意,如果没有此规则(当我在 chrome 的 dom 检查器中禁用它时),facebook 的更新栏会出现双重文本效果:
到目前为止一切都很好,但我现在遇到的是 ie 不支持 color:transparent ,因此存在丑陋的双文本效果。我查看了 ie8 中的状态更新框,facebook 似乎解决了这个问题,但是开发人员工具的功能不足以检查 dom 并查看它们在做什么(该页面的 css 检查似乎被破坏了)。
这是我目前所拥有的,在 chrome 中看起来不错:
在 IE8 中的双文本很糟糕:
有什么想法吗?请保留对特定覆盖技术的建议,我知道我可以尝试使用一些大型的 iframe 嵌入富文本编辑器,但这确实是一个简单的增强功能,最多只能应用于几行文本。
完整代码如下。
html:
<div class="textarea textareaBorder">
<textarea id="myTextarea" class="textarea realTextarea"></textarea>
<div id="myOtherTextarea" class="textarea overlayTextarea"></div>
</div>
css:
.textarea {
font-family:monospace;
font-size: 12px;
border: 0;
width: 100%;
height: 200px;
}
.realTextarea {
margin: 0;
background: transparent;
position: absolute;
z-index: 999;
}
.overlayTextarea {
margin: 0;
position: absolute;
color:transparent;
top: 1px;
left: 1px;
z-index: 998;
}
.overlayTextarea b {
background:#add8e6;
}
.textareaBorder {
border: groove 1px #ccc;
position: relative;
width: 702px;
height: 202px;
}
javascript:
$("textarea.realTextarea").keyup(function(e) {
var textval = $(e.target).val();
var markedup = textval.replace(/(the magic word)/g, "<b>$1</b>")
$("#myOtherTextarea").html(markedup);
});
【问题讨论】:
标签: javascript css internet-explorer textarea