代码之家  ›  专栏  ›  技术社区  ›  Simon

仅允许contenteditable div中的某些标记

  •  0
  • Simon  · 技术社区  · 7 年前

    我有一个contenteditable div,并使用键盘快捷键,如 ctrl+i 用户可以格式化文本。当他们打字的时候 innerHTML 反映标签的变化,即:

    Hello&nbsp;<i>thanks for&nbsp;<br><br>for showing up<b>&nbsp;y'all b</b></i>

    这很好,对我来说效果很好。但问题是,当我以不同的方式打印html时 div 如果用户添加任何其他html标记,它们可能会使应用程序陷入混乱。

    例如,如果他们添加了 <script> 标记或 style 允许添加 <i> , <br> <b> , <s> ,及 &nbsp; 而不能添加任何其他内容?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Eliseo    7 年前

    我认为可以使用regExpresion来避免“indeseables”标记。有些人喜欢

    <textarea #data [(ngModel)]="value" (input)="replace(data)"></textarea>
    <div [innerHtml]="valueParse">
    </div>
    
    replace(control:any)
    {
       this.valueParse=control.value.replace(/<(?!br|i|u)((\w+))>/gm,"&lt$1&gt")
       .replace(/<\/(?!br|i|u)((\w+))>/gm,'&lt\/$1&gt');
    }
    

    看见 stackblitz