当我尝试传递遍及几个块元素的文本时,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>
元素时会发生这种情况。
我该如何解决?
答案 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;
}