Лично я бы переориентировал многое из этого на вспомогательный метод, я не уверен, насколько эффективно использовать метод-прототип в реальном запросе для привязки. Если вы добавите идентификатор в div, который окружает каждое сообщение в блоге, вы можете перейти от .parent к поиску идентификатора, который всегда быстрее, тогда вы можете избавиться от .finds, которые замедляют работу. Кроме того, я бы просто использовал ссылку для вызова функции вместо использования поиска jQuery.live для ее привязки. Итак, если ваш HTML для блога выглядит следующим образом:
<div id="blog12" class="blogpost">
....
<a href="/url/to/comments" onclick="return ToggleComments('blog12');" class="comments-link">
</div>
Тогда javascript будет:
function ToggleComments(blogPostId) {
var blogPost = $("#" + blogPostId);
var commentsWrapper = $("#" + blogPostId + " .comments-wrapper");
var commentsFormWrapper = $("#" + blogPostId + " .comments-form-wrapper");
var commentsLoader = $("#" + blogPostId + " .comments-loader");
var commentsLink = $("#" + blogPostId + " .comments-link");
commentsFormWrapper.fadeOut("fast", function() {
if(!blogPost.hasClass("current")) {
blogPost.addClass("current");
$("div.blogpost:not(id=" + blogPostId + ")").removeClass("current");
commentsLoader.fadeIn("fast");
commentsWrapper.load(commentsLink.attr("href"), function() {
commentsLoader.fadeOut("fast", function() {
commentsWrapper.fadeIn("fast");
});
});
} else {
blogPost.removeClass("current");
commentsWrapper.fadeOut("fast");
}
});
return false;
}
Я стараюсь избегать livequeries, если могу, если вы не добавляете посты в блог на страницу, используя ajax.load, тогда я бы не стал беспокоиться об этом.
Что касается исправления проблемы с IE, я хотел бы знать, связано ли это с привязкой к событию livequery + или как-то так. Надеюсь, это решит это.