За последние 24 часа нас посетили 61937 программистов и 1677 роботов. Сейчас ищут 836 программистов ...

Как удалить в строке блоки ul li

Тема в разделе "PHP для новичков", создана пользователем Dedov_Evgeniy, 25 июл 2018.

  1. Dedov_Evgeniy

    Dedov_Evgeniy Активный пользователь

    С нами с:
    14 май 2015
    Сообщения:
    58
    Симпатии:
    1
    Есть строка - html список:
    HTML:
    1. <ul>
    2.    <li class="del">Категория
    3.         <ul>
    4.                <li></li>
    5.                <li></li>
    6.         </ul>
    7.    </li>
    8.     <li></li>
    9.     <li></li>
    10.     <li></li>
    11. </ul>
    Есть вложенные...
    Некоторые элементы имеют class="del"

    Можно как нибудь вырезать блоки с классом "del"
    Спасибо.
     
  2. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    Код (Javascript):
    1.  var  liDel = document.querySelector('li.del');
    2. liDel.forEach(function(el){
    3.    el.remove();
    4. })
    --- Добавлено ---
    это на javascript
     
  3. Dedov_Evgeniy

    Dedov_Evgeniy Активный пользователь

    С нами с:
    14 май 2015
    Сообщения:
    58
    Симпатии:
    1
    На JavaScript без проблем, именно в php строке нужно.
    Есть метод который формирует дерево категорий:
    PHP:
    1. public function render()
    2.     {
    3.         $level         = 0;
    4.         $menu          = '';
    5.         $level_start = $this->conf['data'][0]->lvl;
    6.  
    7.         foreach($this->conf['data'] as $key => $category)
    8.         {
    9.             switch($category->lvl)
    10.             {
    11.                 case($category->lvl == $level) :
    12.                     $menu .= '</li>' . PHP_EOL;
    13.                     break;
    14.  
    15.                 case($category->lvl > $level) :
    16.                     $class_ul = $level == $level_start ? 'main-menu' : 'sub-menu';
    17.                     $menu .= '<ul class="' . $class_ul . '">';
    18.                     break;
    19.  
    20.                 case($category->lvl < $level) :
    21.                     $menu .= '</li>' . PHP_EOL;
    22.  
    23.                     for($i = $level - $category->lvl; $i; $i--)
    24.                     {
    25.                         $menu .= '</ul>' . PHP_EOL;
    26.                         $menu .= '</li>' . PHP_EOL;
    27.                     }
    28.                     break;
    29.             }
    30.  
    31.             //
    32.             $menu .= '<li>';
    33.             $menu .= '<a href="#">' . $category->title . '</a>';        
    34.  
    35.             $level = $category->lvl;
    36.         }
    37.  
    38.         for($i = $level + 1; $i > $level_start; $i--)
    39.         {
    40.             $menu .= '</li>' . PHP_EOL;
    41.             $menu .= '</ul>' . PHP_EOL;
    42.         }
    43.  
    44.         return $menu;
    45.     }
    Мне нужно либо в этом методе на ходу (подменять / удалять) некоторые элементы, либо уже в результате разбирать строку и менять. В самой функции уже 2 день парюсь и ни как не получается толком сделать.
     
  4. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    Не увидел где в коде формируется
    HTML:
    1. <li class="del"></li>
     
  5. Dedov_Evgeniy

    Dedov_Evgeniy Активный пользователь

    С нами с:
    14 май 2015
    Сообщения:
    58
    Симпатии:
    1
    Это я опустил, но в том то и дело - где вставить проверку (if($category->repace == 1){...}) что бы можно было по ходу обхода, <li> с классом del = вырезать или при необходимости заменить на другой кусок списка - уже сформированного html.
     
  6. voral

    voral Активный пользователь

    С нами с:
    30 ноя 2017
    Сообщения:
    646
    Симпатии:
    104
    Зачем удалять если можно не вставлять. При выполнении вашего условия (как вы сейчас класс del проставляете) переходите на следующую итерацию, то тех пор пока не встретит элемент того же уровня в дереве или выше.
     
  7. Dedov_Evgeniy

    Dedov_Evgeniy Активный пользователь

    С нами с:
    14 май 2015
    Сообщения:
    58
    Симпатии:
    1
    Да в то то и дело что не выходит так, я два дня и та сяк вертел, если покажите как - буду благодарен.
     
  8. villiwalla

    villiwalla Активный пользователь

    С нами с:
    14 дек 2016
    Сообщения:
    471
    Симпатии:
    70
    Я думаю если вы построения списков перепишите на рекурсию, то ряд вопросов отпадё автоматом.