JavaScript window.find不';绝对不行
当我试图传递散布在几个块元素中的文本时,window.find方法无效: HTML: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
<!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;
}