我想要一个函数,它将在呈现的HTML中检查文本节点是否会被浏览器折叠成单个空格:
function isSingleWhitespace(node) {
var spacesCollapsed = node.textContent.replace(/[ \n\r\t]+/g, ''); // What about \s ?
return spacesCollapsed.length === 0;
}
当浏览器呈现HTML时,哪些字符会折叠成单个空格,\s
类是否适合查找它们?作为更大的正则表达式的一部分?
像&zwsp;
之类的东西怎么样? \s
是否包含它?我需要考虑浏览器未呈现的所有内容。 Regexp解决方案并不是唯一可接受的,实际上,如果崩溃到单个空白的算法具有复杂的规范,只能使用RegExp(如真的,“硬核”电子邮件验证)无法精确解析,那么在哪里可以我发现算法规范?任何实现,流程图,字符代码列表,指定任何内容的任何链接,浏览器如何定义,哪些字符将折叠为单个空格。至少,谷歌要查询什么,真的。
我的用例是:我希望在呈现的html 单元和 html源单元之间翻译插入位置,以构建基于wysiwyg的编辑器contenteditable,因为当用户按下退格键或删除时,它应该默默跳过这些字符,并删除可见的字符。
答案 0 :(得分:5)
出于本规范的目的,空格字符是U + 0020 SPACE,U + 0009 CHARACTER TABULATION(标签),U + 000A LINE FEED(LF),U + 000C FORM FEED(FF)和U + 000D CARRIAGE RETURN(CR)。
所以此组中的任何后续字符都会折叠,并且在大多数情况下会导致/尾随修剪 (1),因此您的正则表达式似乎没问题。
似乎您正在阅读textContent
- 它提供了实际的“来源”格式。
如果您使用了innerText
,那么您将得到您可能想要的内容 - 前提是您处于DOM上下文和有能力的环境中。请参阅Kangax的The poor, misunderstood innerText。
(1)行为取决于CSS和/或节点类型:例如<pre>
或white-space: pre
的任何内容都会保留空格,而<p>
或white-space: normal
的任何内容会随后空格字符折叠和修剪。
尝试以下示例:
<p id="p1"> 1 2 3 </p>
<pre><script>
document.write( p1.innerText.split(''))
</script></pre>
<p id="p2" style="white-space: pre"> 1 2 3 </p>
<pre><script>
document.write( p2.innerText.split(''))
</script></pre>