Как удалить все пустые элементы 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). Уровней вложения может быть бесконечное количество. Спасибо. |
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,
Ну хорошо. Там просто ничего нет. :) |
Цитата:
Цитата:
|
Snipe,
Эээ... ну создал страничку с этим списком, вашей функцией и кнопкой, которой присвоил эту функцию. По нажатию кнопки удаляется последний элемент LI. Тот, в котором написано "Hello". Вот и всё. |
Цитата:
UPD: Хотя может и не будет, т.к. в ИЕ имена тегов приводятся к верхнему регистру. |
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]);
}
|
Огромное спасибо. Заработало.
|
| Часовой пояс GMT +3, время: 04:42. |