code: function updateDataIs(expr, parent, tagName) {
        var tag = expr.tag || expr.dom._tag;
        var ref;
  
        var ref$1 = tag ? tag.__ : {};
        var head = ref$1.head;
        var isVirtual = expr.dom.tagName === 'VIRTUAL';
  
        if (tag && expr.tagName === tagName) {
          tag.update();
          return
        }
  
        // sync _parent to accommodate changing tagnames
        if (tag) {
          // need placeholder before unmount
          if(isVirtual) {
            ref = createDOMPlaceholder();
            head.parentNode.insertBefore(ref, head);
          }
  
          tag.unmount(true);
        }
  
        // unable to get the tag name
        if (!isString(tagName)) { return }
  
        expr.impl = __TAG_IMPL[tagName];
  
        // unknown implementation
        if (!expr.impl) { return }
  
        expr.tag = tag = initChild(
          expr.impl, {
            root: expr.dom,
            parent: parent,
            tagName: tagName
          },
          expr.dom.innerHTML,
          parent
        );
  
        each(expr.attrs, function (a) { return setAttribute(tag.root, a.name, a.value); });
        expr.tagName = tagName;
        tag.mount();
  
        // root exist first time, after use placeholder
        if (isVirtual) { makeReplaceVirtual(tag, ref || tag.root); }
  
        // parent is the placeholder tag, not the dynamic tag so clean up
        parent.__.onUnmount = function () {
          var delName = tag.opts.dataIs;
          arrayishRemove(tag.parent.tags, delName, tag);
          arrayishRemove(tag.__.parent.tags, delName, tag);
          tag.unmount();
        };
      }
docs: Update dynamically created data-is tags with changing expressions
  @param { Object } expr - expression tag and expression info
  @param { Tag }    parent - parent for tag creation
  @param { String } tagName - tag implementation we want to use