Всем привет. Для чего нужен режим replace если его функционал вроде как полностью реализован в режиме wrap? При этом wrap не делает зацикливание при замене узла на себя с обёрткой. В каких случаях нужно использовать replace а в каких wrap, что может такого replace чего не может сделать wrap и наоборот, исключая что wrap не уходит в бесконечный цикл как replace в остальном какие различия у них?
Пример.replace()(%7B%20block%3A%20%27link%27%2C%20content%3A%20%7B%7D%20%7D)%3B%0A%0Ablock(%27block2%27).wrap()(%7B%20block%3A%20%27link%27%2C%20content%3A%20%7B%7D%20%7D)%3B&bemjson=(%5B%0A%20%20%20%20%7B%20block%3A%20%27block1%27%20%7D%2C%0A%20%20%20%20%7B%20block%3A%20%27block2%27%7D%0A%5D)%3B%0A):
([
{ block: 'block1' },
{ block: 'block2' }
]);
block('block1').replace()({ block: 'link', content: {} });
block('block2').wrap()({ block: 'link', content: {} });
<div class="link">
<div></div>
</div>
<div class="link">
<div></div>
</div>
wrap()как раз тем и отличается, что дополнительно создает флаг для защиты от зацикливания@tadatuta, если они ни чем кроме этого не отличаются и
wrapведет себя более корректно, для чего тогда нужны 2 почти одинаковых режима с разными названиями, т.е. можно сказать что если бы текущийreplaceубрали и вместо него использовалиwrapпод названиемreplaceто ничего по сути не изменилось? Других отличий вообще у них нет? Одно дело, когда введен режим-помощник напримерprependContentкоторый позволяет писать меньше кода и он сам знает что и как объединить, ноwrapв этом плане не такой умный, ему надо указать конкретно что и куда выводить и если этого не сделать то он работает какreplace, для чего тогда нужен такой небезопасныйreplace?Суть
replace()как раз в том, чтобы не делать лишних манипуляций, которые не нужны никогда, кроме ситуации, когда сущность заменяется сама на себя (а это все-таки очень частный случай).Имеется ввиду что движок при обработке режима
replaceработает быстрее чем при режимеwrapили о каких "лишних манипуляциях" идет речь? Если да, тоwrapработает медленнее даже если не содержит код для замены узла?wrap()будет создавать флаг от зацикливания даже если исходная сущность не вставляется внутрь, так что в примере выше стоит использоватьreplace()