2013-02-28 102 views

回答

7

一旦你看看你的div(你可以通过document.getElementById或任何其他DOM功能,various specs here做),你可以使用textContentinnerText发现div的文本。然后你可以使用indexOf找到那个字符串。

或者,在较低级别上,您可以使用递归函数搜索窗口中的所有文本节点,其中听起来比现在复杂得多。基本上,你的目标div(这是一个Element)开始,您可以遍历其childNodes和搜索他们nodeValue字符串(如果他们Text S)或递归到他们(如果他们Element S)。

的诀窍是一个天真的版本将无法找到"foo"在此标记:

<p><span>fo</span>o</p> 

...既然两种Text节点的存在有它"foo"一个nodeValue(其中一人有其他"o")。

+0

实际上,我期待复制浏览器发现功能(该字符串将被突出显示,并一旦再次点击搜索,它会继续下去Div内的下一场比赛,等等)。 – VeePee 2013-02-28 18:11:38

+1

@VeePee:恐怕你得编写它(这可能只是一个真正的痛苦),即使'window.find'也不是标准化的。但是,这又有可能,因为你可以在'Text'节点中找到文本,用突出的'span'等来分割该节点以包围它。 – 2013-02-28 18:12:47

-2

也许你正在试图不使用jquery ......但是如果没有,你可以使用这个$('div:contains(whatyouarelookingfor)')唯一的问题是它可能会返回父元素,它也包含了匹配的子div。

0

根据其他答案,您将无法使用window.find功能。好消息是,你不必自己编写程序,因为现在有一个名为rangy的库,这对此有很大的帮助。所以,因为代码本身有点太复杂了,所以我只会参考一个rangy库的代码示例,它可以是found here。展望中的代码,你会发现

searchScopeRange.selectNodeContents(document.body); 

,你可以用

searchScopeRange.selectNodeContents(document.getElementById("content")); 

替换要在内容DIV唯一专门搜索。

0
var elements = []; 
$(document).find("*").filter(function() { 
    if($(this).text().contains(yourText)) 
    elements.push($(this)); 
}); 
console.log(elements); 

我没有尝试它,但根据jQuery文档它应该工作。

0

根据你正在尝试做什么,有一个有趣的方式做到这一点,确实工作(确实需要一些工作)。

首先,搜索从用户上次点击的位置开始。所以为了得到正确的上下文,你可以强制点击div。这会将内部指针放置在div的开头。

然后,您可以像平常一样使用window.find来查找元素。它将突出显示并移向找到的下一个项目。您可以创建自己的对话框并处理查找返回的真或假,以及检查位置。因此,例如,您可以保存当前的滚动位置,并且如果下一个返回的结果在div之外,则可以恢复滚动。另外,如果它返回false,那么你可以说没有找到结果。

您也可以显示默认搜索框。在这种情况下,您可以指定起始位置,但不能指定结束位置,因为您失去了控制权。

帮助您入门的一些示例代码。如果有足够的兴趣,我也可以尝试搭建一个jsfiddle。

语法:

window.find(aStringToFind, bCaseSensitive, bBackwards, bWrapAround, bWholeWord, bSearchInFrames, bShowDialog); 

例如,要启动myDiv内搜索,尝试

document.getElementById("myDiv").click(); //Place cursor at the beginning 
window.find("t", 0, 0, 0, 0, 0, 0); //Go to the next location, no wrap around 

你可以设置一个模糊(失焦)事件处理程序,让你知道当你离开div,所以你可以停止搜索。

要保存当前的滚动位置,请使用document.body.scrollTop。如果它试图跳到div之外,则可以将其设置回来。

希望这会有所帮助! 〜techdude

+0

我应该补充说,这可以在firefox/chrome /苹果浏览器。 – techdude 2014-09-05 19:52:14

0

这里怎么我做与jQuery是:

var result = $('#elementid').text().indexOf('yourtext') > -1 

它会返回true或false

相关问题