4

需要 JAVASCRIPT 或 JAVA 解决方案

我正在寻找的解决方案可以使用 java 或 javascript。我有一个字符串中的 html 代码,所以我可以在使用 java 之前或之后使用 javascript 操作它。

问题

无论如何,我必须用标签包装每个单词。例如:

<html> ... >
Hello every one, cheers
< ... </html>

应该改为

<html> ... >
<word>Hello</word> <word>every</word> <word>one</word>, <word>cheers</word>
< ... </html>

为什么?

这将帮助我使用 javascript 选择/突出显示一个单词。似乎唯一的方法是使用我在JAVASCRIPT 提示中添加的函数 highlightElementAtPoint :它只是找到某个 x,y 坐标的元素并突出显示它。我认为如果每个单词都是一个元素,那将是可行的。

我们的想法是使用这种方法来允许我们检测 android WebView 中突出显示的文本,即使这意味着使用扭曲的突出显示方法。多想一下,你会发现很多其他的应用程序。


JAVASCRIPT 提示

我正在使用以下代码突出显示一个单词;但是,这将突出显示属于某个标签的整个文本。当每个单词都是一个标签时,这将在某种程度上起作用。如果有一个替代品可以让我在某个位置突出显示一个单词,那也是一个解决方案。

function highlightElementAtPoint(xOrdinate, yOrdinate) {
    var theElement = document.elementFromPoint(xOrdinate, yOrdinate);
    selectedElement = theElement;
    theElement.style.backgroundColor = "yellow";
    var theName = theElement.nodeName;
    var theArray = document.getElementsByTagName(theName);
    var theIndex = -1;
    for (i = 0; i < theArray.length; i++) {
        if (theArray[i] == theElement) {
            theIndex = i;
        }
    }
    window.androidselection.selected(theElement.innerHTML);
    return theName + " " + theIndex;
}
4

4 回答 4

6

尝试使用类似的东西

String yourStringHere = yourStringHere.replace(" ", "</word> <word>" )
yourStringHere.replace("<html></word>", "<html>" );//remove first closing word-tag

应该工作,也许你必须改变......

于 2012-06-10T16:23:50.343 回答
4
var tags = document.body.innerText.match(/\w+/g);
for(var i=0;i<tags.length;i++){
    tags[i] = '<word>' + tags[i] + '</word>';
}

或者正如@ThomasK 所说:

var tags = document.body.innerText;
tags = '<word>' + tags + '</word>';
tags = tags.replace(/\s/g,'</word><word>');

但是你必须记住:.replace(" ",foo)只替换一次空间。对于多个替换,您必须使用.replace(/\s+/g,foo)

而且正如@ajax333221所说,第二种方式会包含逗号、点等符号,所以更好的解决方案是第一种

JSFiddle 示例:http: //jsfiddle.net/c6ftq/4/

于 2012-06-10T16:25:53.863 回答
2

您可以尝试以下代码,

import java.util.StringTokenizer;


public class myTag 
{
    static String startWordTag = "<Word>";
    static String endWordTag = "</Word>";
    static String space = " ";

    static String myText = "Hello how are you ";

    public static void main ( String args[] )
    {
        StringTokenizer st = new StringTokenizer (myText," ");

        StringBuffer sb = new StringBuffer();

        while ( st.hasMoreTokens() )
        {
            sb.append(startWordTag); 
            sb.append(st.nextToken());
            sb.append(endWordTag);
            sb.append(space);
        }

        System.out.println ( "Result:" + sb.toString() );
    }
}
于 2012-06-10T16:36:25.893 回答
2
inputStr = inputStr.replaceAll("(?<!</?)\\w++(?!\\s*>)","<word>$0</word>");
于 2012-06-10T16:31:22.583 回答