С вашим кодом разбираться лень…
Я сделал бы так примерно:
function Mod2() {
var lis = document.getElementsByTagName("li");
var outLis = [];
for (var i = 0; i < lis.length; i++) {
if (lis[i].parentNode.parentNode.nodeName.toLowerCase() != "li") {
outLis.push(lis[i]);
}
}
var tbl = document.createElement("table"), tr, td, inUl, inLis;
for (var j = 0; j < outLis.length; j++) {
inUl = outLis[j].getElementsByTagName("ul")[0];
inLis = (inUl) ? inUl.getElementsByTagName("li") : [];
tr = tbl.insertRow(-1);
td = tr.insertCell(-1);
td.rowSpan = (inLis != false) ? inLis.length : 1;
td.innerHTML = outLis[j].getElementsByTagName("span")[0].innerHTML;
td = tr.insertCell(-1);
td.innerHTML = (inLis != false) ? inLis[0].innerHTML : "";
for (var k = 1; k < inLis.length; k++) {
tr = tbl.insertRow(-1);
td = tr.insertCell(-1);
td.innerHTML = inLis[k].innerHTML;
}
}
tbl.setAttribute("rules", "all");
tbl.style.border = "1px solid #000";
document.body.appendChild(tbl);
return false;
}
Использование:
<ul>
<li><span>Level 1 list element</span>
<ul>
<li>11</li>
<li>12</li>
<li>13</li>
<li>14</li>
<li>15</li>
</ul>
</li>
<li><span>Level 2 list element</span>
<ul>
<li>21</li>
<li>22</li>
<li>23</li>
<li>24</li>
<li>25</li>
</ul>
</li>
<li><span>Level 3 list element</span>
<ul>
<li>31</li>
<li>32</li>
<li>33</li>
<li>34</li>
<li>35</li>
</ul>
</li>
</ul>
<p><a href="#" onclick="return Mod2();">Create Table!</a></p>