截至目前,我正在使用javascript搜索方法替换正文HTML中的一些文本,如下所示。
假设我的html是
<body>
<div> I am in body...</div>
</body>
然后我使用以下方法
var body = $(body);
var text = body.html();
text = text.replace('I am in body...','Yes');
body.html(text);
但我可以在IE等浏览器中看到慢页面搜索 请建议我改进这一点,也请知道是否有任何插件可以搜索并匹配字符串,即使它包含任何html标签..如下所示
<body>
<div><span>I </span> am in body...</div>
</body>
使用当前的方法我无法比拟这个。
如果我使用
$('*:contains("some search text string")');
这也将匹配DIV和BODY ..但是在这里我想搜索html文本而不是父元素... 感谢
答案 0 :(得分:6)
你应该看看:
范围:(修改文字而不覆盖整个正文)
IE:http://msdn.microsoft.com/en-us/library/ms535872%28v=vs.85%29.aspx
其他:https://developer.mozilla.org/en/DOM/range
find()/ findText()(创建范围)
IE:http://msdn.microsoft.com/en-us/library/ms536422%28v=vs.85%29.aspx
其他:https://developer.mozilla.org/en/DOM/window.find
(Opera不支持find或findText)
关于 question 的一个小修改:
<html>
<head>
<script>
function fx(a,b)
{
if(window.find)
{
while(window.find(a))
{
var rng=window.getSelection().getRangeAt(0);
rng.deleteContents();
rng.insertNode(document.createTextNode(b));
}
}
else if(document.body.createTextRange)
{
var rng=document.body.createTextRange();
while(rng.findText(a))
{
rng.pasteHTML(b);
}
}
}
</script>
</head>
<body onload="fx('I am in body...','Yes')">
<div>Oh <span>I </span>am in body...<i>, wonderful</i></div>
</body>
</html>
答案 1 :(得分:1)
您将只获得包含全文的元素
不是包含相同文本的其他元素的父级
var str = "some search text string";
var elements = $("*:contains('"+ str +"')").filter(
function(){
return $(this).find("*:contains('"+ str +"')").length == 0
}
);
答案 2 :(得分:1)
我认为您的代码运行良好,但您的错误是您没有弄清楚“正文”内容。
这是你的代码:
$(document).ready(function(){
var body = $("body"); // your miss this
var text = body.html();
text = text.replace('I am in body...','Yes');
body.html(text);
});
答案 3 :(得分:0)
试试这个:
$(function() { var foundin = $('body:contains("some search text string")'); });
希望有所帮助