Вы понимаете, что ваш код невалиден с точки зрения (X)HTML? Оформите код разметки правильно, и всё будет работать.
<ul>
<li><span>Level 1 list element</span>
<ul>
<li>list element</li>
<li>Level 2 list element</li>
<li>list element</li>
<li>Level 2 list element</li>
<li>Level 2 list element</li>
</ul>
</li>
<li><span>Level 1 list element</span>
<ul>
<li>list element</li>
<li>Level 2 list element</li>
<li>list element</li>
<li>Level 2 list element</li>
<li>Level 2 list element</li>
</ul>
</li>
<li><span>Level 1 list element</span>
<ul>
<li>list element</li>
<li>Level 2 list element</li>
<li>list element</li>
<li>Level 2 list element</li>
<li>Level 2 list element</li>
</ul>
</li>
<ul>
<script type="text/javascript">
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].getElementsByTagName("span")[0].innerHTML);
}
alert(outLis);
</script>
|
Я же говорю чтов качестве html страницы может быть все что угодно. И списков может быть несколько.
|
Хотя я вас понимаю. Это таблицу со столбаци и строками к примеру по другому никак не напишешь. А у подобного рода списков вариантов написания несоклько в плане структуры.
То-есть к примеру можно обрамлять все ul'ом - можно нет и тп. Так что пожалуй вы правы. |
Весь день сижу. никак не поулчается.
В общем полная задача у меня такая: Преобразовать двухуровневые списки в таблицу, где элемент внешнего списка помещается в ячейку 1 столбца, а вложенный списки в ячейку второго. Ячейка 1 столбца распостраняется на все строки, занимаемые вложенным списком. Вот Заголовки помещать в левый столбец у меня поулчилось. А вот как выбирать LI для данного UL я не пойму. Сейчас у меня он все LI выводит в самый них второго столбца..... вот он код весь.
function Mod(){
var new_table = document.createElement('table');
new_table.style.background = '#fff';
new_table.style.color = '#000';
new_table.border = '1';
new_table.cellSpacing = '0';
var new_table1 = document.createElement('table');
new_table1.style.background = '#fff';
new_table1.style.color = '#000';
new_table1.border = '1';
new_table1.cellSpacing = '0';
var new_div = document.createElement('div');
new_div.style.float = 'left';
new_div.style.margin = '10px';
var parent = document.getElementsByTagName('body')[0];
//массив UL (количество строк в левом столбце)
var mas_table = document.getElementsByTagName('ul');
//выбираем только заголовки (составляем массив outLis из заголовков)
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].getElementsByTagName("span")[0].innerHTML);
}
//рисуем левый столбец
for(var i = 0; i < mas_table.length-1;i++)
{
var new_tr = document.createElement('tr');
var new_td = document.createElement('td');
var textNode = document.createTextNode(outLis[i]);
new_td.appendChild(textNode);
new_tr.appendChild(new_td);
new_table.appendChild(new_tr);
}
//рисуем ТАБЛИЦУ внутри правого столбца. (все LI в одном UL)
for(var k = 0 ;k< 5;k++)
{
var new_td1 = document.createElement('td');
var new_tr1 = document.createElement('tr');
var li2 = document.getElementsByTagName('li')[k+1].innerHTML;
var textNode1 = document.createTextNode(li2);
new_td1.appendChild(textNode1);
new_tr1.appendChild(new_td1);
new_table1.appendChild(new_tr1);
new_tr.appendChild(new_table1);
}
new_table.appendChild(new_tr);
new_div.appendChild(new_table);
parent.appendChild(new_div);
}
ну и вот html который в body
<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>
|
С вашим кодом разбираться лень… :)
Я сделал бы так примерно:
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>
|
Цитата:
ПЫСЫ ну использование тоу меня сделано конечно)) просто сюда не весь же код пихать. |
Да спасибо помогло. Просто был удивлен что так коротко написали. Я просто не всеми особенностями синтаксиса владею ибо НОРМАЛЬНОГО материала по скрипту почти нету....
|
| Часовой пояс GMT +3, время: 05:11. |