2011-03-14 77 views

回答

4

你应该看看this page。做一个查看来源。

他们使用纯Javascript(甚至没有jQuery)来突出显示网页上的特定字词。

基本上它们会将想要搜索的所有文本加载到变量中,并不断找到他们想要突出显示的搜索字词indexOf。当他们找到该术语的索引时,他们会在该索引+ a <span class="highlighted"> +搜索术语+ </span>之前创建一个新的字符串。然后他们继续寻找。一旦他们搜索并重建了所有文本,它们就会用新文本替换DOM中的旧文本。

他们也有沿的.highlighted { background-color: yellow; }

+0

哦哇,我的错误,我很抱歉,我以为你在谈论一个普通的旧网页......我不知道这是否适用于“Android网络视图”。 – 2011-03-14 05:32:18

+0

np,thx很多男人,这似乎很有帮助,虐待检查它是否适用于webview,我会让你知道:) – shadesco 2011-03-14 07:53:24

14

行一些CSS为什么不试试呢? titleWebView是具有加载或加载的HTML的WebView。 searchText应包含要搜索的文本。我构建了一个对话框,用于从用户那里获取搜索条件,并在用户每次搜索时重新加载网页。包含searchText的所有条款都会突出显示(在我的Nexus One上为浅绿色)。希望这可以帮助。

titleWebView.setWebViewClient(new WebViewClient() { 

    @Override 
    public void onPageFinished(WebView view, String url) { 
     if (searchText != null && !searchText.equals("")) { 
      int i = titleWebView.findAll(searchText); 
      Toast.makeText(getApplicationContext(), "Found " + i + " results !", 
       Toast.LENGTH_SHORT).show(); 
      try { 
       Method m = WebView.class.getMethod("setFindIsUp", Boolean.TYPE); 
       m.invoke(titleWebView, true); 
      } catch (Throwable ignored) { 
      } 
      searchText = ""; 
     } 
    } 
}); 
+1

如果我没有弄错,你应该参考findAll(searchText)上的'WebView视图' '。它应该和'titleWebView'一样(已经完全加载)webview。 – 2011-11-01 19:52:33

+0

雅,你说得对。 findAll在预加载的webview上运行。 – 2011-11-04 14:38:37

+3

该死的 - 我会给这个100颗星,如果我可以 - 真棒 – PhillyNJ 2011-12-14 12:08:25

0

代码

Method m = WebView.class.getMethod("setFindIsUp", Boolean.TYPE); 
m.invoke(titleWebView, true); 

该试验使用以下代码后。

findAll("search text") 

当文本匹配Toast显示。

1

findAll()已弃用!你可以像这样简单地使用API​​16以后的findAllAsync():

webView.setWebViewClient(new WebViewClient(){ 
      @TargetApi(Build.VERSION_CODES.JELLY_BEAN) 
      @Override 
      public void onPageFinished(WebView view, String url) { 
       if (searchText != null && !searchText.equals("")) { 
        webView.findAllAsync(searchText); 
       } 
      } 
     }); 
相关问题