解决方案 »

  1.   

    $(document.body).find(dom)
    用find检索判断是否有记录
      

  2.   


    恩,我测试了一下,$(document.body).find(dom) 比 重新用相同的选择器选择dom 快了不少。
    我再想想,没有其他办法那就用这个了
      

  3.   

     var $cache1 = $("p");
        alert($cache1.length);         //1
        alert($cache1.attr("aaa"));   //123    $("p").remove();
        $cache1 = $("p")
        alert($cache1.length);         //1
        alert($cache1.attr("aaa"));   //123更新下变量,$选出来的是副本,和dom没有直接关系
      

  4.   


    有没有办法不重新读整个dom,只是检查缓存的dom是否继续存在?
    为了提高效率
      

  5.   

    通过对象的parent方法来判断。。被移除的对象没有parent对象<p aaa="123">words1</p><p aaa="123">words2</p>
    <script>
        var $cache1 = $("p");
        alert($cache1.length);         //1
        alert($cache1.attr("aaa"));   //123    $("p:eq(0)").remove();    for (var i = 0; i < $cache1.size(); i++) {
            if ($cache1.eq(i).parent().size() == 0) alert('元素“'+$cache1.eq(i).html()+'”不在DOM树中');
        }
    </script>see this:http://stackoverflow.com/questions/3086068/how-do-i-check-whether-a-jquery-element-is-in-the-dom
      

  6.   


    有没有办法不重新读整个dom,只是检查缓存的dom是否继续存在?
    为了提高效率$cache1=$cache1.not($("p").remove());
      

  7.   

    感谢楼上几位
    我用大循环测试了一下效率 循环次数10万和100万,应该足够 循环顺序也颠倒过了,结果可信$(document.body).find(xxx);的速度,和用相同的选择器重新选取的速度相比
    在不是最新版本的ie浏览器下快了5~10倍
    360,谷歌之类js效率高的浏览器下,快了大概1.3倍左右以下测试抛弃ie
    xxx.parent().size(); 、 xxx.parent().length 、$(document.body).find(xxx); 三者的用时
    62:47:156
     xxx.parent().length 最快我去@showbo 给的地址里参考了一下,据说.parent()在某些情况下不一定正确(没测试)
    jQuery.contains(document, xxx[0])
    这个应该是jq自带的方法?10万次循环用时是2.81ms100万次循环 webkit
    xxx.parent().size();  625毫秒
     xxx.parent().length  547ms
    $(document.body).find(xxx);  1393ms
    jQuery.contains(document, xxx[0]);  31ms感谢各位