Bootstrap 从输出中删除了工具提示弹出框内的输入字段 html

Bootstrap input field inside tooltip popover removed from output html

您好,我正在使用 boostrap 4.3.1 并包含 popper 1.14.7。

通常我可以在 popup/tooltip 的内容中添加输入字段。我从什么时候开始就没有,但是当我将输入字段放入内容中时,只有文本是可见的。

当我查看源代码(已编译 html)时,我可以看到 popper 或 bootstrap 删除了输入字段。我有什么问题吗?

    var options = {
        html: true,
        // content: function(){ return $(".amountElec.popup").html();},
        placement: "bottom",
        container: "body"
    };
    
    $(function(){
        $('#manualinput').popover(options);
    })
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>


<div id="manualinput" 
     data-container="body" 
     data-toggle="popover"  
     data-content="test <input name='test' type='text' value='2'>" 
     data-html="true" 
     data-placement="bottom">
     
     OPEN TOOLTUP
</div>

在调试控制台中搜索后,我在 bootstrap 的 tooltip.js 中找到了一些东西。

content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn)

  setElementContent($element, content) {
    if (typeof content === 'object' && (content.nodeType || content.jquery)) {
      // Content is a DOM node or a jQuery
      if (this.config.html) {
        if (!$(content).parent().is($element)) {
          $element.empty().append(content)
        }
      } else {
        $element.text($(content).text())
      }

      return
    }

    if (this.config.html) {
      if (this.config.sanitize) {
        content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn)
      }

      $element.html(content)
    } else {
      $element.text(content)
    }
  }

sanitizeHtml 函数删除输入字段:(.

我找到了解决方案...

我的案例将此添加到 javascript:

        var myDefaultWhiteList = $.fn.tooltip.Constructor.Default.whiteList;
        myDefaultWhiteList.input = [];

https://getbootstrap.com/docs/4.3/getting-started/javascript/#sanitizer

没你想的那么简单:

添加

sanitize: false

作为配置选项,如果你想完全禁用清理。如果你只想适配白名单,你的解决方案就对了

https://github.com/twbs/bootstrap/blob/438e01b61c935409adca29cde3dbb66dd119eefd/js/src/tooltip.js#L472