通过关键字定位页面内容,类似于ctrl+f查找功能

这个功能,做的时候,想了很多种办法。

    一种是,页面查询的时候,传入要查询的值,调用jQuery的方法,找到后,替换查到的值,加样式。这种方法的弊端就是如果你在属性里面有要搜索的信息,就会替换属性里面的内容,导致内容不准确。如这个时候,你只想替换

    另一种,调用浏览器的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;

          

        }

  } 

你可能感兴趣的:(JavaScript)