Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Как удалить все пустые элементы UL (https://javascript.ru/forum/events/2906-kak-udalit-vse-pustye-ehlementy-ul.html)

smashercosmo 24.02.2009 19:46

Как удалить все пустые элементы UL
 
Здравствуйте. Помогите пожалуйста написать функцию.
Есть список вида:

<ul id="navigation">
     <li>For Parents
          <ul id="submenu_For_Parents">
               <li>Item
                    <ul id="submenu_Item"></ul>
               </li>
          </ul>
     </li>
     <li>For Students
          <ul id="submenu_For Students"></ul>
     </li>
     <li>For Teachers
          <ul id="submenu_For Teachers">
               <li>Hello</li>
          </ul>
     </li>
</ul>


Нужно написать функцию, которая будет удалять все пустые теги UL, т.е. те, в которых нет тегов LI (не просто ничего нет, а именно тегов LI).
Уровней вложения может быть бесконечное количество. Спасибо.

Snipe 24.02.2009 19:52

var uls = document.getElementsByTagName('ul');
for (var i=uls.length-1; i>=0; i--) {
  if (uls[i].innerHTML.search('li') == -1)
    uls[i].parentNode.removeChild(uls[i]);
}

Kolyaj 24.02.2009 20:09

Цитата:

Сообщение от Snipe
uls[i].innerHTML.search('li') == -1

Жуть какая.

Цитата:

Сообщение от smashercosmo
не просто ничего нет, а именно тегов LI

А что там еще может быть?

smashercosmo 24.02.2009 20:13

Извините, но к сожалению не работает... :(

smashercosmo 24.02.2009 20:16

Kolyaj,
Ну хорошо. Там просто ничего нет. :)

Snipe 24.02.2009 21:10

Цитата:

Сообщение от Kolyaj (Сообщение 13155)
Жуть какая.

Что не так? =)

Цитата:

Сообщение от smashercosmo (Сообщение 13157)
Извините, но к сожалению не работает... :(

А как вы узнали, что не работает? =)

smashercosmo 24.02.2009 21:15

Snipe,
Эээ... ну создал страничку с этим списком, вашей функцией и кнопкой, которой присвоил эту функцию. По нажатию кнопки удаляется последний элемент LI. Тот, в котором написано "Hello". Вот и всё.

Kolyaj 24.02.2009 21:21

Цитата:

Сообщение от Snipe
Что не так? =)

Эта конструкция не проверяет наличие тега li, она проверяет наличие подстроки li в innerHTML. Хотя в данном конкретном случае, разумеется, будет работать :)

UPD: Хотя может и не будет, т.к. в ИЕ имена тегов приводятся к верхнему регистру.

Андрей Параничев 24.02.2009 21:22

smashercosmo,
Если вы уверены, что в <ul> не будет лишних символов (включая перенос строки или пробел),
то можете воспользоваться такой конструкцией:
var uls = document.getElementsByTagName('ul');
	for (var i=uls.length-1; i>=0; i--) {
		if(!uls[i].hasChildNodes())
			uls[i].parentNode.removeChild(uls[i]);
	}


В крайнем случае, такой:
var uls = document.getElementsByTagName('ul');
	for (var i=uls.length-1; i>=0; i--) {
		if (uls[i].getElementsByTagName("li").length == 0)
			uls[i].parentNode.removeChild(uls[i]);
	}

smashercosmo 24.02.2009 21:27

Огромное спасибо. Заработало.


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