Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Проблема в работе с тегами html (https://javascript.ru/forum/misc/17175-problema-v-rabote-s-tegami-html.html)

zeraid 09.05.2011 00:12

Проблема в работе с тегами html
 
Как выбрать только те теги, которые не стоят в другом.

К примеру мне нужно в двухуровневом списке выбрать только заголовки (внешний список).

<li>Level 1 list element</li>
<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>Level 1 list element</li>
<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>Level 1 list element</li>
<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

Amphiluke 09.05.2011 08:20

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]);
}
// далее работаем с outLis

zeraid 09.05.2011 11:32

Цитата:

Сообщение от Amphiluke (Сообщение 103909)
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]);
}
// далее работаем с outLis

Спасибо. Но мне нужно чтобы это было универсальным. тое тсь не только для вышеприведенного примера.

А как селать массив ЗАНЧЕНИЙ того, что стоит между найденными тегами.

Amphiluke 09.05.2011 12:01

Куда уж универсальнее? :-? Можно, конечно, сделать более функционально, например, написать ф-цию, которой можно передавать id контейнера, содержащего вложенные списки. Типа
function(_cont) {
    var cont = document.getElementById(_cont) || document;
    var lis = cont.getElementsByTagName("li");
    // ...
}

Вообще, если хотите большой универсальности, пользуйтесь библиотеками типа jQuery.

Цитата:

Сообщение от zeraid
А как селать массив ЗАНЧЕНИЙ того, что стоит между найденными тегами.

Для вышеприведенного примера можно изменить так:
if (lis[i].parentNode.parentNode.nodeName.toLowerCase() != "li") outLis.push(lis[i].innerHTML);

zeraid 09.05.2011 12:06

Цитата:

Сообщение от Amphiluke (Сообщение 103930)
Куда уж универсальнее? :-? Можно, конечно, сделать более функционально, например, написать ф-цию, которой можно передавать id контейнера, содержащего вложенные списки. Типа
function(_cont) {
    var cont = document.getElementById(_cont) || document;
    var lis = cont.getElementsByTagName("li");
    // ...
}

Вообще, если хотите большой универсальности, пользуйтесь библиотеками типа jQuery.


Для вышеприведенного примера можно изменить так:
if (lis[i].parentNode.parentNode.nodeName.toLowerCase() != "li") outLis.push(lis[i].innerHTML);

Спасибо большое.

И последний вопрос. Мне нужно в HTML документе все двухуровневые списки ПРЕОБРАЗОВАТЬ в таблицу (ну табилцу я знаю как сделать). НО как УДАЛИТЬ список и вместо него поставить таблицу в ЛЮБОМ HTML документе где есть двухуровневый список соответственно.

Amphiluke 09.05.2011 12:19

Методов DOM для удаления/замены/добавления элементов для этого достаточно.

zeraid 09.05.2011 12:20

И судя по вашему примеру он всеравно все выводит.... ПОлынй код в теге body таков.

<body>
<form style="width:800px; ">
<img src="img/mod.jpg" height="38px" width="129px" onClick="Mod()" onmouseover="this.style.opacity=0.4;"
onmouseout="this.style.opacity=1;">
</form>


<li>Level 1 list element</li>
<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>Level 1 list element</li>
<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>Level 1 list element</li>
<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>


</body>


И вот видимо в массив outList он помещает вообще все названия. А не только 3 заголовка.

zeraid 09.05.2011 12:21

Цитата:

Сообщение от Amphiluke (Сообщение 103932)
Методов DOM для удаления/замены/добавления элементов для этого достаточно.

спасибо за ссылки. А то данный сайт очень не удобно по структуре сделан.

Amphiluke 09.05.2011 12:25

А где в вашем примере вложенные списки? :D

zeraid 09.05.2011 12:33

Цитата:

Сообщение от Amphiluke (Сообщение 103935)
А где в вашем примере вложенные списки? :D

Ну описался. двухуровневые имел в виду как и в 1 сообщении.


Часовой пояс GMT +3, время: 10:35.