我有一个div设置contentEditable并用" white-space:pre" 设置样式,所以它保持像linebreaks的东西.在Safari,FF和IE中,div几乎看起来和工作原理相同.一切都很好.我想要做的是从这个div中提取文本,但是这样的方式不会丢失格式 - 特别是换行符.
我们使用的是jQuery,它的text()功能基本上是预先订购的DFS,并将DOM的那个分支中的所有内容粘合成一个整体.这会丢失格式.
我看了一下这个html()函数,但似乎所有三个浏览器都使用在我的contentEditablediv中幕后生成的实际HTML做了不同的事情.假设我在我的div中输入:
1
2
3
Run Code Online (Sandbox Code Playgroud)
这些是结果:
Safari 4:
1
<div>2</div>
<div>3</div>
Run Code Online (Sandbox Code Playgroud)
Firefox 3.6:
1
<br _moz_dirty="">
2
<br _moz_dirty="">
3
<br _moz_dirty="">
<br _moz_dirty="" type="_moz">
Run Code Online (Sandbox Code Playgroud)
IE 8:
<P>1</P><P>2</P><P>3</P>
Run Code Online (Sandbox Code Playgroud)
啊.这里没有什么非常一致的.令人惊讶的是,MSIE看起来最健康!(大写P标签和所有)
div将动态设置样式(字体,颜色,大小和对齐),这是使用CSS完成的,所以我不确定我是否可以使用pre标记(我在使用Google找到的某些页面上提到过).
有没有人知道任何JavaScript代码和/或jQuery插件或从contentEditable div中提取文本以保留换行符的方式?如果我不需要,我宁愿不重新发明解析轮.
更新:我getText从jQuery 1.4.2中抄袭了这个函数并对其进行了修改以提取它,其中大部分空格完整(我只添加了一行,我添加了换行符);
function extractTextWithWhitespace( elems ) {
var ret = "", elem;
for ( var i = 0; elems[i]; i++ ) {
elem = elems[i];
// Get the text …Run Code Online (Sandbox Code Playgroud) 因此,当在点之前没有空格时,我想要在字符串中使用子点.我认为这可以通过正则表达式轻松完成,但我无法做到.
我有模式,我希望它们是:
h.e.ll.o w.o.r.l.d: hello worldh.e.ll.o w.o.r.l.d: hello worldhello. world: hello. world我尝试了以下模式:
\w+(\.)+\w+
\w+(\.+\w+)
\w+\.+\w+
Run Code Online (Sandbox Code Playgroud)
我总是得到这样的东西: he.ll.o wo.rl.d
我使用python的re模块来匹配和替换以下代码:
>>> re.sub(r'\w+\.+\w+', lambda x: x.group(0).replace('.', ''), 'h.e.ll.o w.o.r.l.d')
'he.llo wo.rl.d'
Run Code Online (Sandbox Code Playgroud)