JQuery是否“缓存”DOM元素?还是铬?

JQuery是否“缓存”DOM元素?还是铬?,jquery,caching,google-chrome,google-chrome-extension,Jquery,Caching,Google Chrome,Google Chrome Extension,我正在编写一个小的Chrome扩展来操纵谷歌搜索结果的DOM,添加一组小问题,询问用户为什么选择跟随该链接; 在润色的过程中,我决定环顾一下页面,以防已经显示了一个旧的民意测验,如果用户在点击一个结果后决定跟踪另一个结果,我就会将其删除,这时我开始注意到一个奇怪的行为:我第一次点击一个链接时,我在能够进入所选页面之前收到了民意测验;第二次在不离开页面的情况下,旧的poll被正确删除,新的poll被添加到DOM中,但是只有当这个新元素被插入到旧元素之前,也就是说,如果我单击了上一个元素上方的链接,

我正在编写一个小的Chrome扩展来操纵谷歌搜索结果的DOM,添加一组小问题,询问用户为什么选择跟随该链接; 在润色的过程中,我决定环顾一下页面,以防已经显示了一个旧的民意测验,如果用户在点击一个结果后决定跟踪另一个结果,我就会将其删除,这时我开始注意到一个奇怪的行为:我第一次点击一个链接时,我在能够进入所选页面之前收到了民意测验;第二次在不离开页面的情况下,旧的poll被正确删除,新的poll被添加到DOM中,但是只有当这个新元素被插入到旧元素之前,也就是说,如果我单击了上一个元素上方的链接,它才会被slideDown作为目标

$('li.g a') // all the results' link
    .bind('click', function(event) {
        event.preventDefault(); // avoid going to destination right away

        var oldpoll = $('#extension');
        if (oldpoll.length)
            oldpoll.slideUp('fast', function(){
                                    $(this).remove();
                                }); // remove (eventual) old poll
        ...

        $(this).parents('.g').append(element);
        $('#extension').slideDown();
    });
如您所见,我认为存在某种缓存,并试图通过声明一个变量来保存旧元素来强制避免它,但这不起作用;最终,我通过使用$'extension a'.parent.slideDown;,强制进行新的DOM遍历,成功地绕过了它;,但现在我真的很好奇这到底是我的错,还是Chrome的错,还是JQuery的错。
谢谢。

正如上面的评论所说,在使用.bind时有很多怪癖:


所以我肯定会推荐使用也不推荐使用的。。。或者新的

我认为问题可能是因为您插入了多个id为“extension”的元素。ID在文档中应该是唯一的,但在slideUp运行期间,将有两个“扩展”元素


因此,如果在旧元素上方插入,然后运行slideDown,它将尝试在新元素上执行,但如果在旧元素之后插入,然后,您的slideDown将在旧版本上运行,因为$'extension'将使用页面中第一个具有该id的版本。

也许。live将帮助您:但我不需要针对Google的结果锚,也不需要将任何内容绑定到我的新元素。我相信下面的Logan说的是对的,这完全是我的错…你是对的:我认为删除旧元素就足够了,但显然它不够快。。在删除旧元素之前,我修改了代码来修改它的id,现在新元素被插入并平滑滑动。