Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.02.2009, 19:46
Новичок на форуме
Отправить личное сообщение для smashercosmo Посмотреть профиль Найти все сообщения от smashercosmo
 
Регистрация: 24.02.2009
Сообщений: 5

Как удалить все пустые элементы 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).
Уровней вложения может быть бесконечное количество. Спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 24.02.2009, 19:52
Аватар для Snipe
Профессор
Отправить личное сообщение для Snipe Посмотреть профиль Найти все сообщения от Snipe
 
Регистрация: 06.05.2008
Сообщений: 765

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]);
}

Последний раз редактировалось Snipe, 24.02.2009 в 19:54.
Ответить с цитированием
  #3 (permalink)  
Старый 24.02.2009, 20:09
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Snipe
uls[i].innerHTML.search('li') == -1
Жуть какая.

Сообщение от smashercosmo
не просто ничего нет, а именно тегов LI
А что там еще может быть?
Ответить с цитированием
  #4 (permalink)  
Старый 24.02.2009, 20:13
Новичок на форуме
Отправить личное сообщение для smashercosmo Посмотреть профиль Найти все сообщения от smashercosmo
 
Регистрация: 24.02.2009
Сообщений: 5

Извините, но к сожалению не работает...
Ответить с цитированием
  #5 (permalink)  
Старый 24.02.2009, 20:16
Новичок на форуме
Отправить личное сообщение для smashercosmo Посмотреть профиль Найти все сообщения от smashercosmo
 
Регистрация: 24.02.2009
Сообщений: 5

Kolyaj,
Ну хорошо. Там просто ничего нет.
Ответить с цитированием
  #6 (permalink)  
Старый 24.02.2009, 21:10
Аватар для Snipe
Профессор
Отправить личное сообщение для Snipe Посмотреть профиль Найти все сообщения от Snipe
 
Регистрация: 06.05.2008
Сообщений: 765

Сообщение от Kolyaj Посмотреть сообщение
Жуть какая.
Что не так? =)

Сообщение от smashercosmo Посмотреть сообщение
Извините, но к сожалению не работает...
А как вы узнали, что не работает? =)
Ответить с цитированием
  #7 (permalink)  
Старый 24.02.2009, 21:15
Новичок на форуме
Отправить личное сообщение для smashercosmo Посмотреть профиль Найти все сообщения от smashercosmo
 
Регистрация: 24.02.2009
Сообщений: 5

Snipe,
Эээ... ну создал страничку с этим списком, вашей функцией и кнопкой, которой присвоил эту функцию. По нажатию кнопки удаляется последний элемент LI. Тот, в котором написано "Hello". Вот и всё.
Ответить с цитированием
  #8 (permalink)  
Старый 24.02.2009, 21:21
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

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

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

Последний раз редактировалось Kolyaj, 24.02.2009 в 21:26.
Ответить с цитированием
  #9 (permalink)  
Старый 24.02.2009, 21:22
Отправить личное сообщение для Андрей Параничев Посмотреть профиль Найти все сообщения от Андрей Параничев
 
Регистрация: 21.02.2008
Сообщений: 1,250

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]);
	}
Ответить с цитированием
  #10 (permalink)  
Старый 24.02.2009, 21:27
Новичок на форуме
Отправить личное сообщение для smashercosmo Посмотреть профиль Найти все сообщения от smashercosmo
 
Регистрация: 24.02.2009
Сообщений: 5

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как проверить загружены ли все картинки браузером Aderba jQuery 13 29.05.2014 14:18
Как удалить элемент из дерева DOM dummer jQuery 13 16.01.2011 16:19
Как удалить из памяти весь XML документ? EisBerg Events/DOM/Window 1 03.04.2010 14:45
Как частично удалить текстовую строку из набора? Nubi jQuery 2 27.12.2008 22:11
как разпринтить все существующие переменные scuter Общие вопросы Javascript 11 22.04.2008 14:53