Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript window.find不';绝对不行_Javascript_Find - Fatal编程技术网

JavaScript window.find不';绝对不行

JavaScript window.find不';绝对不行,javascript,find,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> wi

当我试图传递散布在几个块元素中的文本时,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>
window.find("meI could be");
或:

当搜索词之间存在
元素时,会发生这种情况

如何解决此问题?

作为选项:

function containsStr(str) {
    return document.body.innerText.indexOf(str) > -1;
}
刚刚测试过,它的工作原理和window.find一样。或window.find的工作方式与此my函数相同。 无论如何,这似乎取决于元素的style.display属性。 我什么时候出发

p {
    display: inline;
}
此调用
窗口。查找(“我可能是”)​
返回HTML示例的
true

我创建此项测试是为了测试上述行为。
作为选项,您可以在内存中创建一个
div
元素,获取document.body.innerHTML并将检索到的值设置为div的
innerHTML
,然后将
style.dysplay
更改为
“inline”
,类似于我在代码示例中所做的,然后执行搜索

更新#1:jQuery

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

更新#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;
}

在这个@Musa中工作很好(无论如何在chrome中也很好),而不是在Firefox中。。。(我要求它至少与chrome、ff、safari和explorer配合使用)它在firefox中能工作吗?(我不能更改dom,例如将元素更改为内联)好问题。我刚刚更新了代码exmaple(),使其在FF中工作。也似乎window.find的工作方式有点奇怪(试着点击“内联”按钮几次),但我的函数按预期工作……这是我在ff:containsStr(str):true window.find(str):false中得到的日志,对我来说也是一样。我刚刚更新了代码示例,我的答案-似乎jQuery
:contains
是一个技巧。:)您能提供一个没有jQuery的解决方案吗?
function containsStr$(str) {
    return $('body:contains("'+str+'")').length > 0;
}
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;
}