Кратко: BX.remove()
— это “скальпель” для фронтенд-разработчика на 1С-Битрикс. С его помощью можно грамотно очищать DOM от временных элементов, всплывающих подсказок, динамически созданных форм или модальных окон, не оставляя «мёртвых» ссылок и обработчиков событий.

1. Сигнатура и назначение
/**
* Удаляет элемент из DOM-дерева.
* @param {HTMLElement} node – узел, который нужно удалить.
* @returns {null}
*/
BX.remove(node);
- Возвращает всегда
null
. - Безопасно работает во всех поддерживаемых браузерах.
- Удаляет сам элемент и его дочерние узлы, освобождая память.
2. Базовые кейсы
Ситуация | Короткий рецепт |
---|---|
Скрыть сообщение об успешной отправке формы | Создайте блок с id successMsg , по таймеру setTimeout(() => BX.remove(BX('successMsg')), 3000) |
Очистить корзину после оформления заказа | Переберите cartItems и для каждого вызовите BX.remove(item) |
Закрыть модальное окно | BX.remove(document.querySelector('.modal-overlay')) |
3. Пример: интерактивный переключатель со сменой иконки
<div id="toggleBox" class="arrow--green" data-state="green">
<span class="label">toggleClass</span>
<img id="arrowIcon" src="/assets/icons/arrow-green.svg" alt="arrow">
</div>
<script>
BX.ready(function () {
const box = BX('toggleBox');
const icon = BX('arrowIcon');
const states = [
{cls: 'arrow--green', src: '/assets/icons/arrow-green.svg'},
{cls: 'arrow--up', src: '/assets/icons/arrow-up.svg'},
{cls: 'arrow--down', src: '/assets/icons/arrow-down.svg'}
];
BX.bind(box, 'click', () => {
// Определяем текущий индекс состояния
const current = states.findIndex(s => BX.hasClass(box, s.cls));
const next = (current + 1) % states.length;
// Снимаем все возможные классы и применяем следующий
states.forEach(s => BX.removeClass(box, s.cls));
BX.addClass(box, states[next].cls);
// Обновляем иконку: удаляем старую и добавляем новую
BX.remove(icon);
box.appendChild(
BX.create('img', {
props: {
id: 'arrowIcon',
src: states[next].src,
alt: 'arrow'
}
})
);
});
});
</script>
<style>
#toggleBox{
margin:12px auto;
width:95px;
padding:6px 10px;
text-align:center;
border-radius:6px;
box-shadow:0 0 8px rgba(0,0,0,.4);
cursor:pointer;
user-select:none;
transition:background-color .3s;
}
.arrow--green{background:#a4d07b;color:#fff;}
.arrow--up {background:#4a90e2;color:#fff;}
.arrow--down {background:#e94e77;color:#fff;}
#toggleBox img{width:18px;height:18px;vertical-align:middle;margin-left:4px;}
</style>
4. Комбинируем BX.remove
с другими методами
4.1 Очистка слушателей событий
В старых проектах можно встретить «висящие» обработчики:
const btn = BX('submitBtn');
const handler = () => alert('click');
BX.bind(btn, 'click', handler);
// Позже нужно полностью убрать кнопку
BX.unbind(btn, 'click', handler); // снимаем обработчик
BX.remove(btn); // и только потом удаляем DOM-узел
Если вызвать BX.remove
без BX.unbind
, браузер всё равно уберёт элемент, но обработчик останется в памяти у старых браузеров — это риск утечки.
4.2 Создание → Работа → Удаление
const loader = BX.create('div', {
props: {className: 'loader'},
text: 'Загружаем...'
});
BX.append(loader, document.body);
// ... ждём завершения AJAX ...
BX.remove(loader);
5. Асинхронное удаление внутри Promise / async-функций
async function fetchData() {
const overlay = BX.create('div', {props: {className: 'overlay'}});
BX.append(overlay, document.body);
try {
const data = await BX.ajax.runComponentAction('my:component', 'load');
console.log(data);
} finally {
BX.remove(overlay); // всегда уберётся, даже при ошибке
}
}
finally
гарантирует, что оверлей исчезнет вне зависимости от результата запроса.
6. Проверяем элемент перед удалением
Передавать в BX.remove
null
безопасно, но из-за лишних вызовов может страдать производительность. Сделайте дополнительную проверку, если функция бегает в цикле:
if (node && node.parentNode) {
BX.remove(node);
}
7. Когда не использовать BX.remove
Вместо | Используйте |
---|---|
Часто добавлять/убирать один и тот же блок | BX.style(node, 'display', 'none') или BX.hide/BX.show |
Нужно вернуть элемент обратно | BX.detach(node) — снимет элемент, сохранив ссылку для повторной вставки |
8. Лучшие практики
- Всегда снимайте обработчики (
BX.unbind
,BX.removeCustomEvent
) перед удалением крупных виджетов. - Используйте деградацию: если есть MutationObserver, проверяйте, удалился ли элемент автоматически.
- Для элементов, созданных внутри Vue/React-виджетов, пусть удалением управляет сам фреймворк; прямой вызов
BX.remove
может нарушить виртуальный DOM. - Избегайте каскадного удаления “вглубь” больших веток — лучше удалите родителя, это быстрее.
Итоги
BX.remove()
— небольшая, но незаменимая функция API ядра Bitrix, которая помогает держать DOM «чистым» и память браузера под контролем. Грамотное использование метода вместе с правильной работой с событиями и динамическими классами делает интерфейсы быстрее, а код — поддерживаемым. Попрактикуйтесь с примерами выше, и управление DOM-структурой в Bitrix перестанет быть «чёрной магией».