我正在开发一个可编辑的UIWebView
应用程序。我首先加载包含带有contenteditable=true
的单个DIV的HTML的Web视图。我能够以编程方式强制这个DIV专注于这一行:
[self.webView stringByEvaluatingJavaScriptFromString:
@"document.getElementById('maindiv').focus()"];
这会将光标置于DIV内容的开头,并根据需要显示键盘。
如果我构建初始HTML,以便我的maindiv
包含嵌套的内部SPAN,如下所示:
<DIV ID="maindiv" contenteditable=true>This is some text to display.
<SPAN ID="innerspan">Hey, this is the text in the inner span</SPAN></DIV>
...然后我可以用这一行强制关注这个内部范围:
[self.webView stringByEvaluatingJavaScriptFromString:
@"document.getElementById('innerspan').focus()"];
在这种情况下,光标位于“嘿,这是......”之前,这是内部跨度内容的开始,所以这正是我想要的。
我最初加载仅包含maindiv
的HTML然后动态插入innerspan
时出现问题;在这种情况下,强制焦点innerspan
的尝试失败了。到目前为止,我试图以两种方式动态插入这个内部SPAN:首先,使用document.execCommand('insertHTML' ...)
并传递SPAN的代码;第二,使用document.createElement('span')
和document.body.appendChild(var)
。这两种方法都“工作”,因为它们确实将内部SPAN代码添加到文档中(通过document.body.innerHTML
确认),但似乎这些方法插入的SPAN无法以编程方式聚焦。 / p>
如何让我的UIWebView
识别这个动态添加的元素并让它获得焦点?
答案 0 :(得分:0)
要添加一些细节,事实证明,如果外部DIV具有contentEditable = true
,则只能以contentEditable = false
编程方式强制将焦点强制为嵌套DIV或SPAN。这使事情变得有点棘手,因为外部DIV需要contentEditable = true
才能首先添加嵌套的SPAN。
所以诀窍是添加嵌套的span,然后将外部DIV更改为contentEditable = false
(这也将嵌套SPAN的可编辑性更改为false
),然后将嵌套SPAN更改为{{ 1}};此时焦点可以强制为嵌套的SPAN。
contentEditable = true