这个功能,做的时候,想了很多种办法。
一种是,页面查询的时候,传入要查询的值,调用jQuery的方法,找到后,替换查到的值,加样式。这种方法的弊端就是如果你在属性里面有要搜索的信息,就会替换属性里面的内容,导致内容不准确。如<input sx="xx"/><label>xx</label>这个时候,你只想替换<label>标签里面的内容,不想替换sx的值,但是会替换。
另一种,调用浏览器的ctrl+f接口,其实就是一个ActivexObject控件方法,但是这种的效果是在页面顶端自动给弹出按键ctrl+f效果的搜索框。
var wsh=new ActiveXObject("wscript.shell")
wsh.sendKeys("%EF")
最后就是,目前使用的办法,调用js的createTextRange方法。这种方法容易遇到“由于出现错误 800a025e 而导致此项操作无法完成。”这样的错误,其原因应该是,页面有隐藏的元素,用JS选定网页元素时,如果元素可见则不出会错,如果元素是隐藏的不可见,那么去选定这个元素,就会出现“由于出现错误 800a025e 而导致此项操作无法完成.”的错误。
//页面搜索功能实现,前提是必须完全展开人员单位树
var rng1=null;
var str1=null;
function selgjz(){
document.frames["dwryIframe"].qbzk();
$("#zksq").val("全部收起");
var str = $("#cxgjz").val();
var rng = document.frames["dwryIframe"].document.body.createTextRange();
if(rng1==null||str!=str1){
rng1 = rng;
str1 = str;
}
findText(rng,str,rng1);
}
function findText(rng,str,rng1)
{
if(str=="")
return;
rng=rng1;
if(rng.findText(str))
{
rng.select();
rng.collapse(false);
//rng.moveStart('character',rng.value.length);
rng1=rng;
} else{//搜索到最后的范围还是找不到,则提示搜索完毕,并重新恢复rng最初的范围(否则无法执行新搜索)
alert("搜索完毕");
rng = document.frames["dwryIframe"].document.body.createTextRange();
rng1=rng;
}
}