我有以下 div UIWebView
:
<div contenteditable="true"></div>
如果用户插入新行(使用可视键盘中的回车键),并且当他完成时他在上一个/下一个/完成的灰色可视键盘中单击完成,它将这些行合并为一行。
我怎样才能避免它?
我有以下 div UIWebView
:
<div contenteditable="true"></div>
如果用户插入新行(使用可视键盘中的回车键),并且当他完成时他在上一个/下一个/完成的灰色可视键盘中单击完成,它将这些行合并为一行。
我怎样才能避免它?
也许这个 JSFiddle可以揭示您的应用程序中正在发生的事情。如果您在顶部的 DIV(灰色背景颜色)中键入一些行,则作为其innerHTML
属性的返回值获得的 HTML 代码将首先显示在其textarea
下方的字段中(包括 HTML 标记格式)。正如您很快就会看到的,它不仅仅是您希望在应用程序中处理的内容('line one' + CRLF + 'line two'...),而且它还包含将行与行分隔开的 HTML 元素。这就是浏览器能够显示的方式contenteditable
DIV 就好像它们是“备忘录”类型的控件——通过解析它们的 HTML(这就是浏览器所做的)。这种 HTML 格式的文本也是您的应用程序接收用户提交的文本的方式,您必须决定如何处理这种格式。您可以将它们剥离(我怀疑这是您如何设置该对象的属性,它会为您处理)用<DIV></DIV>
空格字符替换 HTML 元素等,或者选择(使用您的控件的属性,或在代码中) 以您希望处理的任何方式处理此格式。不过我不熟悉UIWebView
,您必须自己找到如何检索完整的 HTML 格式的值,这些值要应用于您正在显示的下一个 DIV 元素(或您正在分配新的相同的元素)值)。
更新:在网上搜索UIWebView
参考后,我实际上偶然发现了 SO 上的一个相关线程,该线程显示了如何检索基础 HTML 文档中元素的 innerHTML 值:
//where 'wView' is your UIWebView
NSString *webText = [wView stringByEvaluatingJavaScriptFromString:@"document.getElementById('inputDIV').innerHTML"];
这样,您就可以检索innerHTML
包含在contenteditable
您在字符串变量中使用的 DIV 中的整个字符串,webText
并将其 HTML 格式的文本解析为更适合您需要的任何内容。但请注意,不同的浏览器在按下contenteditable
时会以不同的方式格式化 DIV Enter Key
,有些浏览器会返回包含在 new 中的下一行DIV
,而另一些浏览器可能会将其包含在段落中P
和/或用 break<BR>
或<BR />
, 当一起使用shift
+移动到时结束行enter
下一行。在处理输入字符串时,您必须考虑所有这些可能性。请参阅我使用您的组件编写的 JSFiddle 脚本UIWebView
以检查适用的格式。
当然,在您的情况下,将您的contenteditable
DIV 替换为textarea
将返回更常用格式\n
的行尾 (CR+LF) 可能会更简单。然而,DIV 更容易设计,因此请选择更适合您需求的。
干杯!
我不相信堆栈的objective-c方面有解决方案。标准的 HTML- 元素只提供一个字符串。有可能通过一些 javascript 魔术或类似的东西在 web 端实现。
我的 HTML 技能还没有达到标准,但如果你也控制了这一点,也许将其更改为 textArea 可能会有所帮助?