JavaScript window.find绝对不起作用

时间:2012-09-16 07:00:30

标签: javascript find

当我尝试传递遍及几个块元素的文本时,window.find方法有效:

HTML

<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
</head>
<body>
  <p>search me</p><b> I could be the answer</b>
</body>
</html>

的JavaScript

window.find("meI could be");

或者:

str = "me";
str+= "\n";
str+="I could be t";

window.find(str);

当搜索词之间存在<p>元素时会发生这种情况。

我该如何解决?

1 个答案:

答案 0 :(得分:1)

作为选项:

function containsStr(str) {
    return document.body.innerText.indexOf(str) > -1;
}

刚试过它,它的工作方式与window.find相同。或者window.find和我的函数一样工作。 无论如何它似乎取决于element的style.display属性。 例如。当我设置

p {
    display: inline;
}

此调用window.find("me I could be")​会为您的HTML示例返回true

我创建了this example来测试上述行为 作为选项,您可以在内存中创建div元素,获取document.body.innerHTML并将检索到的值设置为div的innerHTML,然后将style.dysplay更改为"inline" div与我在代码示例中的操作类似,然后执行搜索。

更新#1:jQuery

我做了更深入的研究,发现使用jQuery :contains选择器比我之前的函数和window.find更好,但可能更昂贵(不确定,需要测试)。< / p>

function containsStr$(str) {
    return $('body:contains("'+str+'")').length > 0;
}

更新#2:纯JavaScript解决方案

function _find(str) {
    var div = document.createElement('div');
    div.innerHTML = document.body.innerHTML;
    var elements = div.getElementsByTagName('*');
    for(var i = elements.length; 0 > i--;) {
        elements[i].style.display = 'inline';
    }
    return (div.innerText || div.textContent).indexOf(str) > -1;
}