如何强调动态添加的SPAN?

时间:2013-09-12 21:09:18

标签: javascript ios uiwebview

我正在开发一个可编辑的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识别这个动态添加的元素并让它获得焦点?

1 个答案:

答案 0 :(得分:0)

要添加一些细节,事实证明,如果外部DIV具有contentEditable = true,则只能以contentEditable = false编程方式强制将焦点强制为嵌套DIV或SPAN。这使事情变得有点棘手,因为外部DIV需要contentEditable = true才能首先添加嵌套的SPAN。

所以诀窍是添加嵌套的span,然后将外部DIV更改为contentEditable = false(这也将嵌套SPAN的可编辑性更改为false),然后将嵌套SPAN更改为{{ 1}};此时焦点可以强制为嵌套的SPAN。

contentEditable = true