作出选择及;在JavaScript中动态添加标记

作出选择及;在JavaScript中动态添加标记,javascript,iphone,html,uiwebview,selection,Javascript,Iphone,Html,Uiwebview,Selection,我需要一些关于iPhone上JavaScript的帮助UIWebView 我的HTML如下所示: <html> <head> <title>Example</title> </head> <body> <span>this example for selection <b>from</b> UIWebView</span> <

我需要一些关于iPhone上JavaScript的帮助
UIWebView

我的HTML如下所示:

<html>
   <head>
      <title>Example</title>
   </head>
   <body>
     <span>this example for selection <b>from</b> UIWebView</span>
   </body>
</html>
这工作正常,并返回所选文本

这也是添加新标记的JS代码:

NSString *AddSpanTag = [NSString stringWithFormat:@"function selHTML() {"
                 "if (window.ActiveXObject) {"
                 "var c = document.selection.createRange();"
                 "return c.htmlText;"
                 "}"
                 "var nNd = document.createElement(\"span\");"
                 "var divIdName = \'myelementid\';"
                 "var ColorAttr = \"background-color: #ffffcc\";"
                 "nNd.setAttribute(\'id\',divIdName);"
                 "nNd.setAttribute(\'style\',ColorAttr);"
                 "var w = getSelection().getRangeAt(0);"
                 "w.surroundContents(nNd);"
                 "return nNd.innerHTML;"
                 "}selHTML();"];
[webView stringByEvaluatingJavaScriptFromString:AddSpanTag];
我的问题是:
如果我从
WebView
中选择“example”(查看HTML文本)文本,它会工作,因为它不包含任何标记。
但是如果我从
WebView
中选择“selection from”(查看HTML文本)文本,它将不起作用,因为它启动
的标记,并且
超出了我的选择范围,那么我无法在
之间添加新标记


如何解决此问题?

由于这是一个
UIWebView
,因此这是Mobile Safari,您可能会丢失许多用于获取选择的分支。我建议将
document.execCommand()
与“HiliteColor”命令一起使用,该命令内置于浏览器中,即使跨越元素边界,也能对整个选择工作:

var sel = window.getSelection();
if (!sel.isCollapsed) {
    var selRange = sel.getRangeAt(0);
    document.designMode = "on";
    sel.removeAllRanges();
    sel.addRange(selRange);
    document.execCommand("HiliteColor", false, "#ffffcc");
    sel.removeAllRanges();
    document.designMode = "off";
}

对不起,我发现这个问题很难理解。我建议重写它,使它更清晰。
var sel = window.getSelection();
if (!sel.isCollapsed) {
    var selRange = sel.getRangeAt(0);
    document.designMode = "on";
    sel.removeAllRanges();
    sel.addRange(selRange);
    document.execCommand("HiliteColor", false, "#ffffcc");
    sel.removeAllRanges();
    document.designMode = "off";
}