Я пишу небольшое расширение Chrome для управления DOM результатов поиска Google, чтобы добавить небольшой набор вопросов, чтобы спросить пользователя, почему он / она решил перейти по этой ссылке;
во время полировки я решил осмотреть страницу в случае, если уже был показан старый опрос, чтобы удалить его (например, если пользователь решил следовать другому результату после того, как он / она нажал на него), и тогда я начал замечать странное поведение: в первый раз, когда я нажал на ссылку, я представил опрос, прежде чем смог перейти на выбранную страницу; во второй раз (не покидая страницы) старый опрос корректно удалялся, а новый добавлялся в 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();
});
Как вы можете видеть, я подумал, что происходит какое-то кэширование, и попытался "принудительно" избежать его, объявив переменную для хранения старого элемента, но это не сработало; в конце концов мне удалось обойти это, форсировав новый обход DOM с помощью $('#extension a').parent().slideDown();
, но теперь мне действительно любопытно, виновата ли я в этом, Chrome или JQuery.
Благодаря.