Кажется, я вижу несколько проблем.
Ваше заявление
$("#testselect").append("<div>")
добавит ОБА открывающий и закрывающий тег к #testSelect следующим образом:
<div id='testselect'><h3><a> </a> </h3><div></div> </div>
Любое дальнейшее добавление к #testselect добавит элементы ПОСЛЕ тегов div.
Ваше следующее заявление,
$("#testselect").append("<p>There are no open session windows for this test.</p>");
Сделаем это
<div id='testselect'><h3><a></a></h3><div></div><p> There are no open session windows for this test. </p> </div>
Ваше заявление
$("#select.").append("</div>")
НЕ добавит закрывающий тег div к #testselect, как вы, похоже, намереваетесь. Вместо этого он ничего не сделает.
Вам следует изменить цикл for на что-то вроде этого:
for (x in data)
{
var $header = $("<h3>").appendTo("#testSelect");
$header.append("<a href=\"#\">" + data[x].name + "</a>")
var messageContainer = $("<div>").appendTo($header);
if (!data[x].sessions)
messageContainer.append("<p> There are no open session windows for this test </p>");
for (si in data[x].sessions)
{
messageContainer.append("<a href=registerconfirm.php?sessionid=\""+data[x].sessions[si].uno+"\">"+data[x].sessions[si].location+"</a>");
}
$("#testselect").accordion();
}