Задать вопрос
mosesfender
@mosesfender
Меланхолик, параноик, падал с коек

Удаление атрибута узла. Почему не удаляется один из атрибутов?

Доброго времени.

Не очень силён в PHP, потому не совсем пойму в чём шило.

Беру все подряд узлы документа, и просто вычищаю в цикле все их атрибуты.

/* @var $tag \DOMElement */
            for ($i = 0; $i < $tag->attributes->length; $i++) {
                $tag->removeAttribute($tag->attributes[$i]->name);
            }


Удаляются все, в частности есть там атрибуты "class", "align" и всякая стандартная ерунда. Но кто-то умный додумался до атрибута "lang". $tag->attributes->length говорит о том, что он его видит, но на выхлопе атрибут остаётся неудалённым.

В чём может быть шило? То что атрибут не очень соответствует спецификации W3C для HTMLDivElement - это я понимаю.

==========================================

UPD. Одним словом, выяснилось, что по каким-то причинам некоторые атрибуты в цикле при удалении игнорируются, причём ни ошибок, ни нотисов. Да, это актуально и для DOMElement::removeAttribute() и для DOMElement::removeAttributeNode(). Пришлось пойти кружным путём, получить их имена, потом по именам удалять.
$removeAttributes = function(&$tag) {
            /* @var $tag \DOMElement */
            $attrs = [];
            /* Пришлось сначала получить имена аттрибутов */
            foreach ($tag->attributes as $idx => $attr) {
                $attrs[$idx]["name"] = $attr->name;
            }
            /* Затем удалять по именам */
            array_walk($attrs,
                    function($attr, $idx)use(&$tag, &$attrs) {
                $attrs[$idx]["removed"] = $tag->removeAttribute($attr["name"]);
            });
            return $attrs;
        };
  • Вопрос задан
  • 77 просмотров
Подписаться 1 Простой 3 комментария
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽