html页面引入文本编辑器quill与使用

一、html引入编辑器

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>文本编辑器</title>
        <meta name="viewport" content="width=device-width, initial-scale=1.0,maximum-scale=1.0, user-scalable=no"/>
        <link href="http://cdn.quilljs.com/1.0.0/quill.snow.css" rel="stylesheet">
        <script src="http://cdn.quilljs.com/1.0.0/quill.js"></script>
        <style>
            /*编辑器样式修改*/
            .ql-snow .ql-picker.ql-size .ql-picker-label::before {
              content: '中字体';
            }
            .ql-toolbar.ql-snow .ql-formats {
              margin-right: 8px;
            }
            .ql-snow .ql-editor code, .ql-snow .ql-editor pre {
              color: #fff;
              background-color: #000;
            }
            #editor{min-height:300px;}
        </style>
    </head>
    <body>
        <!-- 创建工具栏组件 -->
        <div id="toolbar">
            <span class="ql-formats">
              <button class="ql-bold">Bold</button><!--控制粗细-->
              <button class="ql-italic">Italic</button>    <!--控制切斜-->
              <button class="ql-underline">下划线</button>    <!--下划线-->
              <button class="ql-link">link</button>    <!--链接-->
          </span>
          <span class="ql-formats">
              <button class="ql-list" value="ordered"></button><!--序号-->
              <button class="ql-list" value="bullet"></button>    <!--点-->
              <button class="ql-blockquote"></button>    <!--引用-->
              <button class="ql-code-block"></button>    <!--代码-->
              <button class="ql-image" value="bullet"></button>    <!--图片-->
          </span>
          <span class="ql-formats">
            <select class="ql-color">
              <option selected></option>
              <option value="red"></option>
              <option value="orange"></option>
              <option value="yellow"></option>
              <option value="green"></option>
              <option value="blue"></option>
              <option value="purple"></option>
              <option value="grey"></option>
            </select>
            <!-- 可以根据需要加 -->
            <select class="ql-background">
              <option selected></option>
              <option value="black"></option>
              <option value="red"></option>
              <option value="orange"></option>
              <option value="yellow"></option>
              <option value="green"></option>
              <option value="blue"></option>
              <option value="purple"></option>
            </select>
          </span>  
          <span class="ql-formats"><!--控制大小-->
            <select class="ql-size">
              <option value="10px">小字体</option>
              <option selected>中字体</option>
              <option value="18px">大字体</option>
              <option value="32px">超大字</option>
            </select>
          </span>
        </div>
         
        <!-- 创建文本编辑器 -->
        <div id="editor">
          <p>Hello World!</p>
        </div>    
        <button id="btn">提交</button>
        <script>
            window.onload=function(){
                var BackgroundClass = Quill.import('attributors/class/background');
                var ColorClass = Quill.import('attributors/class/color');
                var SizeStyle = Quill.import('attributors/style/size');
                Quill.register(BackgroundClass, true);
                Quill.register(ColorClass, true);
                Quill.register(SizeStyle, true);
                var editor = new Quill('#editor', {
                  modules: { toolbar: '#toolbar' },
                  placeholder: 'Compose an epic...',
                  theme: 'snow'
                });
            }
            /* 获取编辑器的html */
            document.getElementById('btn').addEventListener('click',function(){
                const html = document.querySelector('#editor').children[0].innerHTML
                console.log('html',html)
            });
        </script>
    </body>
</html>

 二、渲染内容

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />
  <title>帮助文档</title>
  <!-- 1. 导入css -->
  <link href="https://cdn.bootcss.com/element-ui/2.8.2/theme-chalk/index.css" rel="stylesheet">
  <!-- 2. 引入vue和vue-router-->
  <script src="https://cdn.bootcss.com/vue/2.6.10/vue.js"></script>
  <!-- 未使用vue路由功能可不导入 -->
  <script src="https://cdn.bootcss.com/vue-router/3.0.6/vue-router.js"></script>
  <!-- 3. 引入ElementUI组件 -->
  <script src="https://cdn.bootcss.com/element-ui/2.8.2/index.js"></script>
  <link href="./css/style.css" rel="stylesheet" type="text/css" />
  <link href="/statics/plugins/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css"/>
</head>
<body>
  <div id='app'>
    <header class="header">帮助文档</header>
    <div class="content">
      <aside class="aside">
        <div class="aside-tree">
          <el-input placeholder="输入关键字进行过滤" v-model="filterText"></el-input>
          <el-tree class="filter-tree" :data="data" :props="defaultProps" 
          default-expand-all :filter-node-method="filterNode" ref="tree" @node-click="handleNodeClick">
          </el-tree>
        </div>
      </aside>
      <section class="section">
        <el-breadcrumb separator="/">
          <el-breadcrumb-item v-if="breadcrumb.length<1">系统文档</el-breadcrumb-item> 
          <el-breadcrumb-item v-else v-for="(item,index) in breadcrumb" :key="index">{
   
   {item}}</el-breadcrumb-item>
        </el-breadcrumb>
        <div v-if="breadcrumb.length>0" class="ql-container ql-snow">
          <div class="ql-editor" v-html="content"></div>  
        </div>
        <div v-else class="ql-home">
          <div class="title">
            <div>欢迎使用帮助文档</div>
          </div>
        </div>
      </section>
    </div>
    <!-- <footer class="footer">1111</footer> -->
  </div>
</body>
<script>
  var vm = new Vue({
    el: '#app',
    data: function () {
      return {
        filterText: '',
        data: [{
          id: 1,
          label: '设计',
        }, {
          id: 2,
          label: '测试',
        }],
        defaultProps: {
          children: 'children',
          label: 'label'
        },
        content:'',
        catalogue:[],
        ckeckedVal:'',
        breadcrumb:[],
        catalogue:[{
          id:1,
          value:`<blockquote>Hello World!</blockquote><p>设计</p><p><br></p><p><span class="ql-bg-purple">text</span></p><pre spellcheck="false">背景色
</pre>`},{
          id:2,
          value:`<blockquote>Hello World!</blockquote><p>测试</p><p><br></p><p><span class="ql-bg-purple">text</span></p><pre spellcheck="false">背景色
</pre>`
        }]
      }
    },
    watch: {
      filterText(val) {
        this.$refs.tree.filter(val);
      }
    },
    created(){
    },
    mounted(){
    },
    methods: {
      handleNodeClick(data,node){
      this.currentNodeKey = data.id;
      // 判断点击的层级进行操作
      let arr = []
      let cournt=node
      console.log(node.id)
      for(let i=0;i<node.level;i++){
        arr.unshift(cournt.label)
        cournt= cournt.parent
      }
      this.breadcrumb = arr
      let currentHtml = this.catalogue&&this.catalogue.filter(item=> item.id==data.id)[0].value ||''
      console.log('arr',arr,this.catalogue)
      this.$nextTick(()=>{
        this.content = `${currentHtml}`
      })
    },
      filterNode(value, data) {
        console.log('----------------',value,data)
        if (!value) return true;
        return data.label.indexOf(value) !== -1;
      },
    },

  });
</script>

</html>

style.css样式

body{
  padding: 0;
  margin: 0;
}
#app{
  width: 100%;
  background-color:rgba(222,222,222,.5);
}
.header{
  position: sticky;
  top: 0;
  padding-left: 10px;
  height: 50px;
  z-index: 999;
  background-color:#409eff;
  color: #fff;
  line-height: 50px;
}
.content{
  display: flex;
  /* padding: 10px 0; */
}
.aside{
  width: 18%;
  min-width: 220px;
  height: 90vh;
}
.aside-tree{
  padding: 10px;
  height: 100%;
  background-color:rgba(222,222,222,.5);
  border: 1px solid #eee;
  overflow: scroll;
}
.section{
  padding: 10px;
  width:82%;
  min-width: 600px;
  height: 90vh;
  overflow: hidden;
  overflow-y: scroll;
}
.filter-tree{
  background-color:rgba(222,222,222,.1);
}
.ql-container{
  width: 100%;
  height: 100%;
  padding:10px 0;
}
/* .footer{
  height:150px;
  background: rgba(222,222,222,1.5);
} */
.ql-home{
  width: 100%;
  height: 100%;
  display: flex;
  justify-content: center;
  align-items: center;
}
.ql-home .title{
  color: #000;
  font-size: 40px;
}
.ql-home .subtitle{
  width: 100%;
  margin-top: 50px;
  color: #000;
  font-size: 12px;
  text-align: center;
}
.el-tree{
  color: #000;
}
.el-input__inner{
  /* background-color: rgba(222,222,222,.1); */
  border: 1px solid #606266;
}

.organization_configuration .el-tree--highlight-current .el-tree-node.is-current > .el-tree-node__content {
    background-color: transparent; 
    color: #409eff; 
    /* font-weight: bold;  */
}
.el-tree-node:focus > .el-tree-node__content {
  background-color: transparent;
  color: #409eff; 
  /* font-weight: bold; */
}


 /* 代码 */
 pre {
  padding: 5px 10px;
  color: #fff;
  background-color: #000;
  border-radius: 2px;
}
/* 引用 */
blockquote {
  border-left: 5px solid #DDD;padding: 10px 5px 10px 15px;margin: 15px 0;font-size: 15px;color:#555;background-color: #F5F5F5;
}

猜你喜欢

转载自blog.csdn.net/weixin_45291798/article/details/127778039
今日推荐