для начала было бы неплохо уменьшить свой код. его трудно читать
function topic(a, b) {
var div = $("#" + b);
//Тут див закрывается, если он открыт
if (div.text() && parseInt(div.css("height")) ) {
return div.slideUp(500);
}
//Тут див должен открыться с уже имеющимся контентом
if (div.children().hide().length) {
return div.css({ "height":"0px", "overflow":"auto"}).
animate({
height: div[0].scrollHeight
}, 500, function () {
div.children().show()
});
}
//Тут див открывается, подгружая контент
div.css({ "height":"0px", "overflow":"auto"}).
html("Загрузка...").
children().
show();
$.ajax({
type: "POST",
url: "doit.php",
data: "id=" + a,
success: function (msg) {
div.html(msg);
div.animate({
height: div[0].scrollHeight
}, 500, function () {
div.children().show()
})
}
});
}
плюс пара неточностей.
$("#"+b).css("height")
вернет строку, а не число.
т.е.
54px, а не
54
...
$("#" + b).css("overflow", "hidden");
$("#" + b).animate({
height: 0
}, 500, function () {
$("#" + b).children().hide()
})
это велосипед. см далее. этот код делает точно такие же действия
$("#"+b).slideUp(500);
.....
//Тут див должен открыться с уже имеющимся контентом
if ($("#" + b).children().hide()) {
что вы хотели написать в условии ? просто, $(el).hide() возвращает jq-объект, а объекты при приведении к булевому типу дают true. если вы хотите проверить, есть ли потомки, можно было посмотреть свойство length объекта jq.
//Тут див должен открыться с уже имеющимся контентом
if ($("#" + b).children().hide().length > 0) {