Как удалить все пустые элементы 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]); } |
Огромное спасибо. Заработало.
|
Каюсь, схалтурил (извините). Можно так:
var uls = document.getElementsByTagName('ul'); for (var i=uls.length-1; i>=0; i--) { if (uls[i].innerHTML.search(/<li.*>/i) == -1) uls[i].parentNode.removeChild(uls[i]); Проверил, вроде работает. Дополнение: В любом случае, мне кажется со строкой быстрее будет чем с домом, хотя нагрузочного тестирования не проводил. |
Цитата:
|
Цитата:
Мне кажется, просто дело привычки. Т.е. мне привычнее обрабатывать через innerHTML, Вам через DOM. Разве это говорит, что код испорчен? |
Я тоже безмерно люблю innerHTML, но когда вопрос стоит "сколько тегов есть в таком-то теге", то это, разумеется, getElementsByTagName. Тут по названию метода ясно, что мы делаем, в случае же innerHTML -- из знания регулярных выражений, которые зачастую мало читабельные.
Цитата:
|
Часовой пояс GMT +3, время: 02:01. |