精华内容
下载资源
问答
  • linux文本编辑

    万次阅读 多人点赞 2018-04-25 19:18:04
    文本编辑器 vi vim是vi增强版 vim需要安装 sudo apt-get -y install vim vim的三种工作模式 1 编辑模式 命令模式=>编辑模式iaos 按键 作用 i 光标当前位置插入文本 a 光标的下一...

    linux常见服务

    一. 文本编辑器

    vi vim是vi增强版

    vim需要安装

    sudo apt-get -y install vim
    # macOS使用brew安装
    

    vim的三种工作模式

    1 编辑模式

    命令模式=>编辑模式iaos

    按键作用
    i在光标当前位置插入文本
    a光标的下一个位置插入文本
    A当前行的行尾插入文本
    S删除当前行内容,重新输入
    s删除光标当前位置的字符,开始输入
    o在当前的下一行开始一个新行开始输入

    2 命令模式

    编辑模式=>命令模式 请按esc

    按键作用
    H向左移动一个字符
    j向下移动一行
    k向上移动一行
    l向右移动一个字符
    (移动到块首
    )移动到块尾
    gg移动第一行
    G移动尾行
    ngg移动到第n行 n是一个数字
    yy复制光标当前行
    nyy复制n行
    p黏贴
    np 100p黏贴n次
    dd删除一行
    ndd删除n行
    u撤销上一次的操作
    shift + 6移动到本行行首
    shift+ 4移动到本行行尾
    ctrl + r恢复前一个被撤销的操作
    .重复前一个操作

    3 底行模式

    命令模式=》底行模式 按 : 或者 /

    按键作用
    :w保存,不退出
    :q不保存,退出
    :q!强制退出,不保存
    :wq保存并退出
    :x保存并退出
    :set nu显示行号
    :set nonu不显示行号
    :n移动到指定的行
    /字符串 (回车)搜索指定字符串 n找下一个,N找上一个
    ?字符串从下往上找,n往上找,N往下找
    :s/要找的字符串/要替换的字符串替换光标当前行的找到的第一个字符串
    :s/要找的字符串/要替换的字符串/g替换光标当前行的找到的所有字符串
    :%s/要找的字符串/要替换的字符串替换每一行第一个找到字符串
    :%s/要找的字符串/要替换的字符串/g全文替换

    二. 网络管理

    1. ifconfig

      配置和显示Linux内核中网络接口的网络参数。

      #1 显示网络信息
      [root@localhost ~]# ifconfig
      ens33      Link encap:Ethernet  HWaddr 00:1C:42:14:7A:DD  
                inet addr:192.168.3.46  Bcast:192.168.3.255  Mask:255.255.255.0
                inet6 addr: fe80::21c:42ff:fe14:7add/64 Scope:Link
                UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
                RX packets:351142 errors:0 dropped:0 overruns:0 frame:0
                TX packets:748 errors:0 dropped:0 overruns:0 carrier:0
                collisions:0 txqueuelen:1000 
                RX bytes:81649700 (77.8 MiB)  TX bytes:94340 (92.1 KiB)
      
      lo        Link encap:Local Loopback  
                inet addr:127.0.0.1  Mask:255.0.0.0
                inet6 addr: ::1/128 Scope:Host
                UP LOOPBACK RUNNING  MTU:65536  Metric:1
                RX packets:0 errors:0 dropped:0 overruns:0 frame:0
                TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
                collisions:0 txqueuelen:0 
                RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
      重要数据说明:
          inet addr: ipv4地址    inet6: ipv6地址
          HWaddr:  mac地址     Mask: 子网掩码
          UP:代表网卡开启   RUNNING:代表网卡的网线被接上   MULTICAST:支持组播 MTU:最大传输单元 (1500字节)。
          
      #2. ifconfig ens33 查看指定网卡信息
      #3.启动关闭网卡
      ifconfig ens33 up  #启动网卡
      ifconfig ens33 down   #关闭网卡
      
      # 重启网络
      /etc/init.d/network restart
      
    2. ifup和ifdown 启动和关闭网卡

      需要配置/etc/network/interfaces,不建议使用这两个命令
      
    3. ip

      ip命令用来显示或操纵Linux主机的路由、网络设备、策略路由和隧道,是Linux下较新的功能强大的网络配置工具。

      ip [选项] [参数]
      选项: -s 显示详细信息
      
      #1.用ip命令显示网络设备的运行状态
      ip link list
      
      #2 查看网络地址
      ip a
      ip address show
      ip address show  ens33  #查看具体网卡的ip地址
      
      #3 修改接口状态
      ip link set enss33 up    #开启网卡
      ip link set ens33  down #关闭网卡
      
      #4显示路由信息
      ip route show
      
    4. ping

      ping命令用来测试主机之间网络的连通性

      用法:  ping [参数] [主机名或IP地址]
      参数:
          -c n     执行指定次数 n的ping命令
          -b       测试与网关IP的连通性
      #1.查看于百度的联通型
      [root@localhost ~]# ping -c 3 www.baidu.com
      PING www.a.shifen.com (119.75.213.61) 56(84) bytes of data.
      64 bytes from 119.75.213.61: icmp_seq=1 ttl=56 time=6.96 ms
      64 bytes from 119.75.213.61: icmp_seq=2 ttl=56 time=6.62 ms
      64 bytes from 119.75.213.61: icmp_seq=3 ttl=56 time=6.14 ms
      
      --- www.a.shifen.com ping statistics ---
      3 packets transmitted, 3 received, 0% packet loss, time 3126ms
      rtt min/avg/max/mdev = 6.141/6.577/6.963/0.337 ms
      
      #2.查看于网关的连通性
      [root@localhost ~]# ping -b www.baidu.com
      PING www.a.shifen.com (119.75.216.20) 56(84) bytes of data.
      64 bytes from 119.75.216.20: icmp_seq=1 ttl=56 time=5.29 ms
      64 bytes from 119.75.216.20: icmp_seq=2 ttl=56 time=8.47 ms
      64 bytes from 119.75.216.20: icmp_seq=3 ttl=56 time=14.2 ms
      
      --- www.a.shifen.com ping statistics ---
      3 packets transmitted, 3 received, 0% packet loss, time 3499ms
      rtt min/avg/max/mdev = 5.294/9.342/14.257/3.711 ms
      
    5. netstat 查看网络连接状况

      netstat  -an
        -n  显示端口
        -p  显示进程
        -t tcp
        -u udp
        -a  显示所有
      #1.sudo netstat -nt       显示所有已建立的TCP连接
      Active Internet connections (w/o servers)
      Proto Recv-Q Send-Q Local Address               Foreign Address             State     
      tcp        0      0 10.0.112.235:22             10.0.112.252:57530          ESTABLISHED 
      tcp        0     64 192.168.3.46:22             192.168.3.50:58677          ESTABLISHED 
      
      #2. sudo netstat  -nu      显示已建立的UDP连接
      #3. sudo netstat -ntpa     显示TCP端口号的使用情况
      

    三. 进程管理

    1. ps

      Linux中的ps命令是Process Status的缩写。ps命令用于报告当前系统的进程状态。可以搭配kill指令随时中断、删除不必要的程序。

       用法:  ps  [选项参数]  [用户名](可选)
         参数:
          -a -e 显示所有进程
          -u  显示指定用户的进程
           x :通常与 a 这个参数一起使用,可列出较完整信息。
       #1.ps -e|more -20      显示所有进程,每屏20个
       #2.ps -u root|more -10   显示指定用户的进程信息
       #3. ps -ef|grep kworker   过滤指定信息
       #4. ps -aux 列出目前所有的正在内存当中的程序
       USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
       root         1  0.0  0.1  19232  1496 ?        Ss   00:23   0:00 /sbin/init
       root         2  0.0  0.0      0     0 ?        S    00:23   0:00 [kthreadd]
       root         3  0.0  0.0      0     0 ?        S    00:23   0:00 [migration/0]
       PID 进程号   %CPU  cpu的占用率   %MEM  内存的占用率  VSZ 占用虚拟内存的量  RSS 驻留内存的量
       TTY 进程的控制终端,?表示不是从终端进入的。   STAT 进程状态(R就绪 S可中断的休眠态 T暂停执行)
       START 进程开始时间  TIME已经执行的时间
       
       #杀死进程
       kill [参数] 进程号
       #1. kill 2 杀死指定进程号的进程
       #2. kill -9 2 强制杀死指定进程号的进程
       
       #杀死指定进程名的进程
       killall -TERM  进程名称
      
    2. top

      top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。

      用法: top
      使用q退出
      top - 03:32:26 up  3:08,  2 users,  load average: 0.03, 0.04, 0.05
      Tasks: 100 total,   1 running,  99 sleeping,   0 stopped,   0 zombie
      Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
      Mem:   1016160k total,   163660k used,   852500k free,     9412k buffers
      Swap:  2064380k total,        0k used,  2064380k free,    51072k cached
      
        PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                   
          1 root      20   0 19232 1496 1224 S  0.0  0.1   0:00.95 init                     
          2 root      20   0     0    0    0 S  0.0  0.0   0:00.03 kthreadd                 
          3 root      RT   0     0    0    0 S  0.0  0.0   0:00.05 migration/0               数据说明:
      03:32:26    当前时间
      up 3:08    系统运行时间,格式为时:分
      2 user    当前登录用户数
      load average: 0.03, 0.04 0.05    系统负载,即任务队列的平均长度。三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。
      
      第二、三行为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行。内容如下:
      total 进程总数         running 正在运行的进程数       sleeping 睡眠的进程数
      stopped 停止的进程数   zombie 僵尸进程数              Cpu(s): 
      
      最后两行为内存信息。内容如下:
      Mem:
      191272k total 物理内存总量      173656k used 使用的物理内存总量    17616k free    空闲内存总量
      22052k buffers    用作内核缓存的内存量   
      Swap: 
      192772k total    交换区总量      0k used    使用的交换区总量    192772k free    空闲交换区总量
      
      进程信息区统计信息区域的下方显示了各个进程的详细信息。首先来认识一下各列的含义。
      序号  列名    含义
      a    PID     进程id
      b    PPID    父进程id
      c    RUSER   Real user name
      d    UID     进程所有者的用户id
      e    USER    进程所有者的用户名
      f    GROUP   进程所有者的组名
      g    TTY     启动进程的终端名。不是从终端启动的进程则显示为 ?
      h    PR      优先级
      i    NI      nice值。负值表示高优先级,正值表示低优先级
      j    P       最后使用的CPU,仅在多CPU环境下有意义
      k    %CPU    上次更新到现在的CPU时间占用百分比
      l    TIME    进程使用的CPU时间总计,单位秒
      m    TIME+   进程使用的CPU时间总计,单位1/100秒
      n    %MEM    进程使用的物理内存百分比
      o    VIRT    进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
      p    SWAP    进程使用的虚拟内存中,被换出的大小,单位kb。
      q    RES     进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
      r    CODE    可执行代码占用的物理内存大小,单位kb
      s    DATA    可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
      t    SHR     共享内存大小,单位kb
      u    nFLT    页面错误次数
      v    nDRT    最后一次写入到现在,被修改过的页面数。
      w    S       进程状态(D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程)
      x    COMMAND 命令名/命令行
      y    WCHAN   若该进程在睡眠,则显示睡眠中的系统函数名
      z    Flags   任务标志,参考 sched.h
      
    3. lsof

      lsof命令是一个列出当前系统打开文件的工具。

      需要安装命令
      yum -y install lsof
      
      #1、直接输入命令 lsof
      终端下输入lsof就会显示系统打开的所有文件。由于lsof会访问核心内存和各种文件,必须以root用户来执行该命令。
      

    四. 登录状态

    1. uname

      uname命令用于显示系统信息

      #显示linux核心版本号
      uname -r 
      
      #显示系统所有信息
      uname -a
      
      #显示操作系统版本
      uname -v
      
    2. hostname

      显示或设置主机名称

      #显示主机名
      $ hostname
      
      #临时设置主机名
      $ sudo hostname hello
      
      #永久设置主机名
      $ vim /etc/hostname #ubuntu的主机名在/etc/hostname文件中,其他liux可能会在/etc/sysconfig/network中
      
    3. whoami

      whoami命令用于显示自身用户名称。

    4. who

      显示当前登录用户

      who [-aHbl]
         -H 显示标题
         -a 显示所有信息
         -b 显示最近登录时间
         -l 显示系统登录时间
      $ who -Hl
      名称   线路       时间           空闲  进程号 备注
      登录   tty1         2018-03-30 14:17               952 id=tty1
      
      $ who -b
       系统引导 2018-03-30 14:17
       
      $ who -a
                 系统引导 2018-03-30 14:17
      登录     tty1         2018-03-30 14:17               952 id=tty1
                 运行级别 5 2018-03-30 14:17
      python   + tty7         2018-03-30 14:17 02:34        1431 (:0)
      
    5. w

      用来查看登录者的信息及他们的行为

      w 命令:执行这项指令可得知目前登入系统的用户有那些人,以及他们正在执行的程序。单独执行w 命令会显示所有的用户,您也可指定用户名称,仅显示某位用户的相关信息。
      
      语法:w [-fhlsuV][用户名称]
      linux w 命令参数:
          -f  开启或关闭显示用户从何处登入系统。
          -h  不显示各栏位的标题信息列。
          -l  使用详细格式列表,此为预设值。
          -s  使用简洁格式列表,不显示用户登入时间,终端机阶段作业和程序所耗费的CPU时间。
          -u  忽略执行程序的名称,以及该程序耗费CPU时间的信息。
      
      #1. 常见用法,直接使用
      [root@localhost csl]# w
       03:44:07 up  3:20,  2 users,  load average: 0.07, 0.08, 0.06
      USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
      root     tty1     -                01:41    1:00m  0.13s  0.13s -bash
      root     pts/1    192.168.3.50     02:34    0.00s  0.18s  0.00s w
      
    6. last

      显示用户最近登录信息

      #显示用户最近登录信息,只显示10行
      $ last -10  
      python   tty7         :0               Fri Mar 30 14:17    gone - no logout
      reboot   system boot  4.13.0-37-generi Fri Mar 30 14:17   still running
      python   tty7         :0               Thu Mar 29 20:59 - down   (17:17)
      reboot   system boot  4.13.0-37-generi Thu Mar 29 20:49 - 14:17  (17:28)
      python   pts/18       10.0.103.229     Thu Mar 29 14:53 - 18:00  (03:07)
      python   pts/17       10.0.136.238     Thu Mar 29 09:48 - 17:05  (07:17)
      python   pts/17       10.0.136.238     Thu Mar 29 09:36 - 09:48  (00:11)
      python   tty7         :0               Thu Mar 29 09:36 - down   (08:24)
      reboot   system boot  4.13.0-37-generi Thu Mar 29 09:36 - 18:00  (08:24)
      python   pts/18       10.0.136.238     Thu Mar 29 09:17 - 09:35  (00:17)
      

    五. linux的启动

    1 开机BIOS加载

    2 读取MBR引导记录

    3 加载linux内核

    4 加载init进程,实现系统初始化,init进程是其他所有进程的父进程

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N5BsitFI-1573453126617)(runlevel.png)]

    5 执行/etc/init/rc-sysinit.conf,设置启动级别

    6 启动内核

    7 执行不同运行级别脚本程序,视级别的不同执行rc0~rc6下的脚本来完成相应的初始化和启动工作

    8 执行/etc/init.d/rc.local ,可以把要自动加载的程序写到这个脚本里

    9 用户登录

    显示当前运行模式的命令:
    runlevel
    who -r
    

    ##六. 计划任务

    在指定的时间做指定的事情,周期性的事情。需要用户有相应的权限,否则无法操作

    vim /etc/crontab 打开定时任务

    crontab -l 查看定时任务 /etc/crontab 里边的除外

    crontab -e 编辑定时任务

    分 小时 日 月 周 操作 解释

    0-59 0-23 1-31 1-12 0-6

    0 0 * * * mysqldum 每天0时备份数据库

    0 2 * * 0 sync 每个星期天2点中做文件同步

    0 0 15 * * /usr/local/jsgz.py 每个月的15号0时计算工资

    0 */1 * * * sh 每个1个小时执行脚本

    0 8,12,18 * * * daka.py 每天的8点、12点、18点打卡

    crontab -r 清空所有定时任务 只能清除crontab -e产生的定时任务

    清除指定定时任务 crontab -e 删除指定行

    service cron start/restart/stop #启动、重启、停止定时任务

    • 实时查看日志
    tail -f  文件名
    watch -d -n 秒数  cat /8.txt #带高亮
    

    七. 软件安装

    7.1 压缩与解压

    windows常见的压缩包:rar zip 7zip iso

    linux常见的压缩包: zip gz bz2 tar

    1. gz压缩和解压

      如果没有gzip,用apt安装
      
      # apt-get  install gzip
      
      gzip 文件名1  文件名2 #多文件压缩,自动生成对应压缩包  文件名.gz  不能压缩目录  删除原件
      gzip -d 压缩包1  压缩包2   #支持批量解压,删除原件
      
    2. bz2压缩和解压

      压缩
      bzip2 文件名1  文件名2   #支持批量压缩 不支持压缩目录 自动升成 文件名.bz2
      
      解压
      bzip2 -d 包名1  包名2   #自动删掉原件
      
    3. tar压缩和解压

      tar [option]
         -c 打包
         -x 解包
         -v 可视化
         -f指定文件名
         -t 查看包里的东西
         -z 用gzip对包进行压缩
         -j 用把bzip2对包进行压缩
      
         tar -cvf 包名   文件名1 文件名2  目录1  #不删除原件,可以打包目录
         tar -xvf 包名   #不删除原件
      
         打包并压缩
         tar -zcvf 包名  文件名1 文件名2  目录1 
         tar -jcvf 包名  文件名1 文件名2  目录1
      
         解压
         tar -zxvf  包名
         tar -jxvf  包名
      
    4. zip压缩和解压

      apt-get -y install zip unzip
      
      zip 包名  文件名或目录
      unzip 包名
      

    7.2 软件的安装

    1. apt

    解决deb复杂的依赖关系

    查看软件包信息 		  sudo apt-cache showsrc 包名
    获得源码       		     sudo apt-get source 包名
    安装软件     		     sudo apt-get install 包名
    删除软件                  sudo apt-get remove 包名
    获取新的软件包列表         sudo apt-get update
    升级有可用更新的软件包     sudo apt-get upgrage
    
    安装apache
    #1 更新软件列表
    sudo apt-get update
    
    #2 安装
    sudo apt-get install apache2
    
    #3 启动服务
    sudo  /etc/init.d/apache2 start  # start | restart | stop
    或
    service apache2 start
    
    # 配置虚拟站点
    cd /etc/apache2
    #在sites-available目录下配置自己的虚拟站点
    cp 000-default.conf   www.jxc.com.conf
    
    cd ../sites-enabled
    ln -s ../sites-available/www.jxc.com.conf  www.jxc.com.conf
    
    #配置网站
    cd /var/www/html/jxc
    vim index.html
    
    #重启apache服务
    sudo /etc/init.d/apache2 restart
    
    
    展开全文
  • 使用vi有时会想直接复制一行数据,然后粘贴一行或者直接删除一行数据 复制一行数据的方法 把光标放到要复制的一行前面,然后按两下yy字母键 然后把光标放到要复制到的地方去,按键盘的p字母键 删除一...

    在使用vi有时会想直接复制一行数据,然后粘贴一行或者直接删除一行数据

    复制一行数据的方法

    把光标放到要复制的一行前面,然后按两下yy字母键

    然后把光标放到要复制到的地方去,按键盘的p字母键

    删除一行是把光标移动到要删除的一行上,按两下dd键

    下面是相关键的说明:

    x,X  : 在一行中,x为向后删除一个字符(相当于del键),X为向前删除一个字符(相当于backspace键)。
    dd   : 删除光标所在的那一整行。
    ndd  : n 为数字。从光标开始,删除向下n列。
    yy   : 复制光标所在的那一行。   
    nyy  : n为数字。复制光标所在的向下n行。
    p,P  : p 为将已复制的数据粘贴到光标的下一行,P则为贴在光标的上一行。
    u    : 复原前一个操作
    CTRL + r : 重做上一个操作。
    小数点'.': 重复前一个动作。

    展开全文
  • MFC 文本编辑器C++

    热门讨论 2012-12-31 01:03:27
    Visual C++编写的带图形界面的文本编辑器,能菜单栏中实现对txt文挡的打开、关闭、保存、另存为、新建、打印功能,可实现对文档内容的撤销、复制、粘贴、剪切、删除、查找、替换、全选功能,格式中可实现字体设置...
  • eWebSoft在线文本编辑

    热门讨论 2009-05-11 14:51:05
    现在很多的在线文本编辑器,编辑完,都要点一下保存功能,或者提交按钮中加入脚本进行处理,然后再提交,而eWebEditor只需加入调用的那一行外,无需上面的操作处理。 状态保持 现在很多的在线文本编辑器,...
  • 笔者最近负责公司项目中的富文本编辑器的部分,由于是自己公司的产品,为了性能等方面的考虑要求笔者自己写原生代码实现。过程当中遇到了很多坑,现在来与大家一起交流一下。 目录: 要完成的功能: 富文本编辑...

    笔者最近在负责公司项目中的富文本编辑器的部分,由于是自己公司的产品,为了性能等方面的考虑要求笔者自己写原生代码实现。过程当中遇到了很多坑,现在来与大家一起交流一下。

    目录:

    1. 要完成的功能:
      1. 富文本编辑器的功能实现
      2. 选中后映射属性到属性栏
      3. 实现复制粘贴保留支持样式
    2. 涉及到的知识:
      1. 富文本编辑器底层实现原理(contenteditable属性)
      2. 鼠标选中时获取选中文本的样式集合(getSelection)
      3. 过滤粘贴样式(递归)
    3. 遇到的坑:
      1. 获取鼠标选中文本的样式

    首先先说富文本编辑器的实现原理

    富文本编辑器的实现方法有俩种,以前是通过iframe的document,而现在基本上都是使用document.execCommand(),现在很多的富文本编辑器的实现原理都是使用的这个方法,比如wangEditor,UEidtor,WYSIWYG
    接下来我们就简单的做一个简单的富文本编辑器小demo,效果如下:

    在这里插入图片描述
    代码如下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <style>
            .editorBox {
                width: 500px;
                min-height: 200px;
                border: 1px solid;
            }
        </style>
    </head>
    <body>
        <div class="editorBox" contenteditable="true">
            hello world!
        </div>
        <button onclick="handleStyle('Bold')">加粗</button>
        <button onclick="handleStyle('Italic')">斜体</button>
        <button onclick="handleStyle('Underline')">下划线</button>
        <button onclick="handleStyle('StrikeThrough')">删除线</button><br/>
        字间距值:<input type="text" id="letterSpacingValue" value="50">px
        <button onclick="setStyle('letterSpacing')">设置字体间距</button><br/>
        <script>
            //设置简单的字体风格
            function handleStyle(type,val) {
                document.execCommand('StyleWithCSS',true,true)
                document.execCommand(type,false,val)
            }
    
            //设置比较复杂的字体样式,笔者只写了一个字间距,如果向设置其他的可按此规则重复利用此模块
            function setStyle(type) {
                let letterSpacingVal = document.getElementById('letterSpacingValue').value;
                document.execCommand('styleWithCSS',true,true)
                document.execCommand('Bold')
                //获取选中的内容节点
                let select = document.getSelection().anchorNode.parentElement;
                select.style[type] = val + 'px';
                document.execCommand('Bold')
            }
        </script>
    </body>
    </html>
    

    首先是将div变成了可编辑状态。使用的是contenteditable这个属性,这个属性赋值为true的时候就是可编辑状态赋值为false的时候就是不可编辑的状态
    其次是加了五个按钮一个输入框。五个按钮分别添加了事件,对应改变选中文本的不同状态。核心功能是document.execCommand() 这个方法。而我们使用document.execCommand(‘StyleWithCSS’,true,true) 是为了不用b标签,i标签等等。当然了,这句话也可以忽略,省略之后使用document.execCommand()命令的时候会将选中文本变成指定的标签,比如你是 bold命令 那么就会变成 b 标签,如果是 italic命令 就会变成 i 标签等等,而使用了document.execCommand(‘StyleWithCSS’,true,true)这个命令是为了将标签统一变成 span标签,然后在span标签里面 添加style属性 放样式。

    现在我们来做属性映射的功能

    首先我们要在div当中添加俩个事件,分别是onmouseup和onkeyup事件,

    <div 
    	id="editorBox" 
    	contenteditable="true"
    	onmouseup="getSelectionMessage()"
    	onkeyup="getSelectionMessage()"
    >
        hello world!
    </div>
    

    注意:
    事件千万不要搞错了,笔者刚开始用的onkeydown事件被折磨了将近俩天。
    当鼠标或者键盘在div进行操作的时候就会触发此事件而后获取选中文本或者光标前一个文本的信息。

    可以用俩种方法,但是各有利弊。

    1. 第一种是使用官方提供的方法, document.queryCommandState() 或者 document.queryCommandValue() 。这俩个方法用处都是一样的,只不过针对的东西不一样,document.queryCommandState()是查看bold,italic等等命令的状态,如果选中的文本有此命令就会返回true,没有此命令就会返回false。
      document.queryCommandValue()是查看比如说 ForeColorFontName 等等命令的值,如果有就返回值,没有就返回false。(我们这个例子没有使用,所以不需要这个命令)
    function getSelectionMessage() {
        let arr = ['Bold','Italic','Underline','StrikeThrough'];
        let buttons = document.getElementsByTagName('button');
        arr.forEach((item, index) => {
            document.queryCommandState(item)
            ? buttons[index].style.color = 'red'
            : buttons[index].style.color = 'black'
        })
    }
    

    下面为效果图:
    在这里插入图片描述
    在这里插入图片描述
    这时你会发现我们已经实现了简单的属性映射。但是还是有问题的。但之后的技术涉及到公司核心技术我就不再去写了。笔者写的这些如果还是有朋友们 没有看懂可以在下方评论 ,笔者一一回复。

    此处为特殊情况:
    在这里插入图片描述
    这种时候你会发现它没有进行映射了,是因为这个方法本身提供的这个技术,就是 当出现冲突的时候就会全部为false ,全都不映射。
    2. 第二种方法就是自己去使用getSelection方法结合递归去遍历。逻辑稍微复杂一点。

    在之后的一个需求就是过滤掉本富文本编辑器不支持的内容。

    如果不过滤的话在别的地方粘贴过来的信息就会变成这个样式:
    在这里插入图片描述
    而这些标签和样式肯定是我们不支持的,如果把这些东西放到富文本编辑器里面是很难去进行处理的。所以我们要过滤掉不需要的东西。最开始笔者是用三重递归去解决的,先过滤标签然后过滤样式,在过滤子元素的标签和样式。后来的话领导给我介绍了个好东西,专门用来过滤标签和样式的。链接如下:过滤标签和样式的包
    首先我们需要下载这个包:

    npm i sanitize-html -S
    

    然后在你的富文本编辑器文件中引用这个包:

    const sanitizeHtml = require('sanitize-html');
    

    之后在你的编辑器外层div上面添加一个onpaste事件:

    <div 
    	id="editorBox" 
    	contenteditable="true"
    	onmouseup="getSelectionMessage()"
    	onkeyup="getSelectionMessage()"
    	onpaste="filterPasteContent()"
    >
        hello world!
    </div>
    

    最后在你的js部分加入此方法:

    filterPasteContent(event) {
      event.preventDefault();		//阻止浏览器默认行为
      event.stopPropagation();		//阻止事件冒泡
      let data = event.clipboardData.getData('text/html');		//获取粘贴板的信息
      //通过sanitizeHtml包的方法去过滤标签和样式
      data = sanitizeHtml(data, {
        allowedTags: ['b','i','u','strike','font','ol','ul','div'],
        allowedAttributes: {
          'font': ['color','face','font','style'],
        }
      })
      const selection = window.getSelection();		//获取对象
    
      if (!selection.rangeCount) return false;		//如果没有就退出,不进行操作
    
      let div = document.createElement("div");		//创建一个div
      div.innerHTML = data;		//div的innerHTML就是我们刚刚过滤完粘贴信息的内容
      
      selection.getRangeAt(0).insertNode(div);		//将刚刚的div插入到富文本编辑器中
    }
    

    这样我们就把我们不需要的标签和样式所过滤掉了,效果如下:
    在这里插入图片描述

    如果朋友们的富文本编辑器还有更炫的东西或者更深的需求欢迎下方评论,我们一起学习一起研究!

    展开全文
  • xheditor可视化富文本编辑

    千次阅读 2018-11-05 09:27:17
    简洁易用的基于jQuery的富文本编辑器xheditor从CSDN上已经...本文来自http://xheditor.com/,纪念CSDN上用过感觉最好的富文本编辑器。最新版本下载地址 xheditor 富文本编辑器 1. xhEditor入门基础 1.1. 在线...

    简洁易用的基于jQuery的富文本编辑器xheditor从CSDN上已经改版退出了,新版的Markdown编辑器将原版的编辑文章相关SEO的设置也设为自动获取了,总的感觉现在的编辑器没有原来那么方便了。本文来自http://xheditor.com/,纪念在CSDN上用过感觉最好的富文本编辑器。最新版本下载地址

    xheditor 富文本编辑器
    xheditor 富文本编辑器

    1. xhEditor入门基础

    1.1. 在线可视化HTML编辑器概述

    1.2. 获取xhEditor

    1.3. xhEditor运行环境

    1.4. xhEditor基本使用指南

     

    1.1. 在线可视化HTML编辑器概述

    在Web程序应用中,最常见的一种行为是信息和言论的发布和交流。而在信息发布的同时,往往会有对信息发布的格式、类型和功能上的需求,比如:加粗、下划线等等,以使文字信息能够更形象更美观的传达给阅读者,同时也提高信息发布的工作效率。在这个需求的背景下,HTML在线编辑器就应运而生了。

    顾名思义,在线HTML编辑器就是在线编辑HTML代码的工具,它经常被应用于留言板留言、论坛发贴、Blog编写日志或等需要用户输入HTML的地方,是Web应用的常用模块之一。在线HTML编辑器可以实现对编辑内容添加各种丰富多彩的文字效果,以及提供各种方便快捷的操作功能,最大的提高编辑工作效率。在线HTML编辑器是任何网站不可或缺的重要功能组件,是互联网用户得心应手的驰骋网络的有力工具。

     

    1.2. 获取xhEditor

    您可以访问xhEditor官方网站下载最新版本的xhEditor编辑器,xhEditor官方网站地址为:http://xheditor.com/,打开右上角的免费下载 | 参数向导链接,即可找到最新版本的下载地址。

    xhEditor无需任何安装,无需任何设置,直接解压缩并拷贝到你的网站相应文件夹下面即可直接调用。

     

    1.3. xhEditor运行环境

    xhEditor是基于浏览器的HTML、CSS和Javascript环境开发的,因此原则上市场上绝大部分浏览器我们都能完美的运行,目前已测试的浏览器兼容列表如下:IE 6.0+,Firefox 3.0+,Opera 9.6+,Chrome 1.0+,Safari 3.22+ (+号代表往后所有新版本)。xhEditor是完全基于浏览器环境的,因此不存在操作系统选择性,是完全跨平台的。xhEditor同时也可以应用在任何的服务端语言环境下,例如:PHP、ASP、ASP.NET、JAVA等,可以在您的CMS、博客、论坛、商城等互联网平台上完美的嵌入运行,能够非常灵活简单的和您的系统实现完美的无缝衔接。

     

    1.4. xhEditor基本使用指南

    您只需按照以下简单步骤即可学会使用xhEditor:

    1. 下载最新版本xhEditor:http://xheditor.com/download.html
    2. 将下载的压缩文件解压缩,上传其中的xheditor.min.js以及xheditor_lang、xheditor_emot、xheditor_plugins和xheditor_skin四个文件夹到网站相应文件夹中。
      注:如果您网站中没有使用jQuery框架,也请一并上传jquery文件夹中的jquery-1.4.4.min.js
    3. 在需要调用xhEditor编辑器的网页head标签结束之前添加以下代码:
      <script type="text/javascript" src="/js/jquery-1.4.4.min.js"></script>
      <script type="text/javascript" src="/js/xheditor.min.js"></script>
      <script type="text/javascript" src="/js/xheditor_lang/zh-cn.js"></script>
      注:jQuery和xhEditor的js文件路径请根据你网站具体路径情况相应修改
    4. 在需要实现可视化的文本框textarea属性中添加:
       class="xheditor"
      例如:<textarea name="content" class="xheditor">test</textarea>

    经过以上步骤,你就已经成功的将xhEditor编辑器安装在你的网页中。若需要学习更多xhEditor编辑器的使用技术,请参阅:xhEditor进阶使用

    2. xhEditor进阶使用

    2.1. 进阶使用指导

    2.2. 初始化参数列表

    2.3. API函数接口列表

    2.4. 上传程序开发规范

    2.5. 插件开发指南

    2.6. 皮肤设计指南

    2.7. 关于二次开发

     

    2.1. 进阶使用指导

    阅读本章节请先阅读:xhEditor入门基础,若你已经熟悉xhEditor的基本使用,请往下继续。

    xhEditor提供两种方式初始化编辑器:

    • 方法1:利用class属性来初始化和传递各种初始化参数,例:
       class="xheditor {skin:'default'}"
    • 方法2:利用xhEditor提供的jQuery插件接口来实现对特定textarea的初始化和传递参数,例:
      $('#elm1').xheditor();
      或者
      $('#elm1').xheditor({tools:'mini'});

    特别说明:两种初始化方法只能选择其中一种使用,如果两种方法的代码同时存在页面中,方法2的代码不会有任何效果。

    我们更倾向于推荐大家使用方法1,因为更简单易用,不涉及任何的Javascript代码。通过简单的参数设置即可定制各种效果的编辑器界面,简单易用且功能强大。

    如果想实现更加复杂的交互应用,或者希望xhEditor编辑器能够和自己的Javascript代码实现互相访问,那么你可以选择使用方法2,相对具有更大的自由空间。

    xhEditor也提供了即时的卸载编辑器方法:

    $('#elm1').xheditor(false);

     

    2.2. 初始化参数列表

    初始化参数示例代码:

    $('#elm1').xheditor({tools:'full',skin:'default',showBlocktag:true,internalScript:false,internalStyle:false,width:300,height:200,loadCSS:'http://xheditor.com/test.css',fullscreen:true,sourceMode:true,forcePtag:true,upImgUrl:"upload.php",upImgExt:"jpg,jpeg,gif,png"});

    初始化参数列表:

    1. tools:自定义工具按钮

      参数值:full(完全),mfull(多行完全),simple(简单),mini(迷你)
      或者自定义字符串,例如:'Cut,Copy,Paste,Pastetext,|,Source,Fullscreen,About'
      
      完整按钮表:
      |:分隔符
      /:强制换行
      Cut:剪切
      Copy:复制
      Paste:粘贴
      Pastetext:文本粘贴
      Blocktag:段落标签
      Fontface:字体
      FontSize:字体大小
      Bold:粗体
      Italic:斜体
      Underline:下划线
      Strikethrough:中划线
      FontColor:字体颜色
      BackColor:字体背景色
      SelectAll:全选
      Removeformat:删除文字格式
      Align:对齐
      List:列表
      Outdent:减少缩进
      Indent:增加缩进
      Link:超链接
      Unlink:删除链接
      Anchor:锚点
      Img:图片
      Flash:Flash动画
      Media:Windows media player视频
      Hr:插入水平线
      Emot:表情
      Table:表格
      Source:切换源代码模式
      Preview:预览当前代码
      Print:打印
      Fullscreen:切换全屏模式
      About:关于xhEditor
    2. skin:皮肤风格选择

      参数值:default(默认风格),o2007blue(Office 2007 蓝色),o2007silver(Office 2007 银色),vista(Vista),nostyle(NoStyle)
    3. layerShadow:阴影的深度(按钮面板和模式窗口的背景阴影)

      参数值:0(不显示阴影),大于0的数值(显示阴影并设置阴影的深度)
    4. clickCancelDialog:点击任意位置取消按钮面板功能

      参数值:默认true(开启点击取消功能),false(关闭点击取消功能,必需要点击“取消”按钮才能关闭按钮面板)
    5. showBlocktag:显示段落标签

      参数值:true(显示段落标签),false(不显示)
    6. linkTag:样式链接link标签保留状态

      参数值:true(保留样式链接link标签),false(清理样式链接link标签)
    7. internalScript:内部JS代码保留状态

      参数值:true(保留内部JS代码),false(清理内部JS代码)
    8. inlineScript:内联JS代码保留状态

      参数值:true(保留内联JS代码),false(清理内联JS代码)
    9. internalStyle:内部样式保留状态

      参数值:true(保留内部样式),false(清理内部样式)
    10. inlineStyle:内联样式保留状态

      参数值:true(保留内联样式),false(清理内联样式)
    11. width:编辑器宽度

      参数值:不带单位的数字,例:300
    12. height:编辑器高度

      参数值:不带单位的数字,例:100
    13. background:编辑器背景

      参数值:字符串,例:url(test.gif) no-repeat,设置编辑器背景,格式同CSS同名参数一致。建议直接设置textarea的css背景
      备注:v1.1.1新添加
    14. loadCSS:加载样式

      参数值:URL地址、URL数组以及直接内部样式,例如:'1.css'、['1.css','2.css']、'<style>body{font-size:20px;}</style>'<br />备注:1.0.0 RC3新添加加载内部样式功能
    15. fullscreen:默认全屏显示

      参数值:true(全屏大小),false(标准大小)
    16. sourceMode:默认源代码模式

      参数值:true(源代码模式),false(编辑模式)
    17. forcePtag:强制P标签

      参数值:true(强制使用P标签),false(不强制),默认true
    18. cleanPaste:是否清理粘贴的HTML代码

      参数:0(不做任何清理),1(简单清理Word),2(深入清理Word),3(强制转文本),默认为1简单清理Word
      说明:若网站应用需要保留更多的Word样式效果,请设置此值为1,不过产生的HTML代码体积会大大增大
      备注:1.1.4版本中新变更,原为wordDeepClean和forcePasteText两个参数
    19. disableContextmenu:禁用编辑区的右键菜单

      参数值:true(禁用右键菜单),false(不禁用),默认false
      备注:v1.1.0新添加
    20. editorRoot:编辑器JS文件所在的根路径

      参数值:编辑器所在的根路径,用在某些特殊情况下定位编辑器的根路径,默认为空,读取默认的编辑器根路径
      备注:v1.1.0新添加
    21. shortcuts:自定义键盘快捷方式

      参数:快捷键对应事件代码的对象数组
      示例:{'ctrl+enter':function(){$('#frmTest').submit();}}
      备注:1.0.0 beta2新添加
    22. urlBase:相对URL地址的基地址

      参数:字符串的URL地址,用以解决前后台不在同一路径的资源定位问题
      备注:1.1.0新添加
    23. urlType:本地URL地址强制转换方式选择

      参数:abs(绝对路径),root(根路径),rel(相对路径)
      备注:1.0.0 beta2新添加,v1.1.0版中名字由localUrl变更为urlType
    24. emotPath:修改表情图片的URL根路径

      参数:字符串的URL地址,默认为空,指向编辑器路径下的默认表情
      备注:1.1.0新添加
    25. emotMark:是否在表情img标签上标注emot属性

      参数:true(标注),false(不标注),默认为false
      说明:若使用了ubb插件,请设置此属性为true
      备注:1.0.0 beta2新添加
    26. emots:添加自定义表情

      参数:可定义多个JSON对象数组,示例如下:{qq:{name:'QQ',count:55,width:25,height:25,line:11},msn:{name:'MSN',count:40,width:22,height:22,line:8}}
              name:表情分组名
              count:表情数量
              list:表情列表,例:{test1:'表情1',test2:'表情2'},键名代表文件名,扩展名必需为gif,键值代表alt信息
              width:单个表情区域宽度,必需大于或等于表情最大宽度
              height:单表情区域高度,必需大于或等于表情最大高度
              line:单行显示表情数量
              说明:count和list必需选其中一个值,注意count模式插入表情img的alt为空
      备注:1.0.0 beta2新添加
    27. hoverExecDelay:悬停自动执行延迟的时间

      参数:数值(单位毫秒),默认为100,设置为-1关闭此功能
      备注:1.0.0 rc2新添加
    28. defLinkText:超链接的默认文字

      参数值:字符串(默认值:“点击打开链接”)
      说明:只在不选择任何内容的情况下才会用到这个参数值
    29. modalWidth:showModal弹出窗口的默认宽度

      参数值:数值,默认为350
      说明:弹出窗口的默认宽度
    30. modalHeight:showModal弹出窗口的默认高度

      参数值:数值,默认为220
      说明:弹出窗口的默认高度
    31. modalTitle:showModal弹出窗口是否显示上方的标题栏

      参数值:true(显示),false(不显示)
      说明:控制弹出窗口是否显示上方的标题栏,默认为显示,若需要显示一个更定制个性化的iframe窗口,可通过此参数隐藏上方的标题栏
    32. upBtnText:上传按钮的文字

      参数值:任意字符串,默认值:“上传”
      备注:1.0.0 beta2新添加
    33. html5Upload:是否开启HTML5上传支持

      参数值:true(允许),false(不允许),默认为true允许
      说明:本功能需要浏览器支持HTML5上传
      备注:1.0.0 Final新添加
    34. upMultiple:允许一次上传多少个文件

      参数值:大于0的数值,默认:99,设置为1关闭多文件上传
      说明:本功能需要浏览器支持HTML5上传
      备注:1.0.0 RC3新添加
    35. upLinkUrl:超链接文件上传接收URL

      参数值:接收用户上传的服务器端程序URL,默认留空为禁用超链接上传功能,具体使用方法请参考demo8演示文件
      注:可使用内置变量:{editorRoot},代表当前编辑器的根路径,例:{editorRoot}upload.php
    36. upLinkExt:超链接上传前限制本地文件扩展名

      参数值:超链接上传前限制的文件扩展名列表,默认为:zip,rar,txt,建议与服务端扩展名检查列表一致
    37. upImgUrl:图片文件上传接收URL

      参数值:接收用户上传的服务器端程序URL,默认留空为禁用上传功能,具体使用方法请参考demo8演示文件
      注:可使用内置变量:{editorRoot},代表当前编辑器的根路径,例:{editorRoot}upload.php
    38. upImgExt:图片上传前限制本地文件扩展名

      参数值:图片上传前限制的文件扩展名列表,默认为:jpg,jpeg,gif,png,建议与服务端扩展名检查列表一致
    39. upFlashUrl:动画文件上传接收URL

      参数值:接收用户上传的服务器端程序URL,默认留空为禁用上传功能,具体使用方法请参考demo8演示文件
      注:可使用内置变量:{editorRoot},代表当前编辑器的根路径,例:{editorRoot}upload.php
    40. upFlashExt:动画上传前限制本地文件扩展名

      参数值:动画上传前限制的文件扩展名列表,默认为:swf,建议与服务端扩展名检查列表一致
    41. upMediaUrl:视频文件上传接收URL

      参数值:接收用户上传的服务器端程序URL,默认留空为禁用上传功能,具体使用方法请参考demo8演示文件
      注:可使用内置变量:{editorRoot},代表当前编辑器的根路径,例:{editorRoot}upload.php
    42. upMediaExt:视频上传前限制本地文件扩展名

      参数值:视频上传前限制的文件扩展名列表,默认为:avi,建议与服务端扩展名检查列表一致
    43. onUpload:文件上传成功回调函数

      参数值:成功后需要执行的函数
      说明:这个函数执行时返回的值为上传程序返回的msg变量,可能为字符串或者数组,若为字符串则直接代表url,若是数组,则必需包含一个url的变量,其它可由可开发者自定义
      备注:1.0.0 beta2新添加
    44. plugins:自定义按钮之插件扩展

      插件对象的属性解释:
      c:样式表名称
      t:插件名字(鼠标在按钮上方时显示)
      s:快捷方式,例:"ctrl+enter"
      h:是否鼠标悬停直接执行,1:直接执行(省略当前值代表不直接执行)
      e:按钮点击后需要执行的代码(省略执行代码,则把当前的插件名作为参数,调用浏览器的execCommand函数)
      
      特别说明:
      如果您希望样式表存储在系统自带的模板目录ui.css中,请将插件对象的样式名留空,则会自动按照插件名来调用相应的样式,例如:xhEdtBtnCut、xhEdtBtnCopy,其中的Cut和Copy是插件名
      
      具体调用方法请参考演示文件夹中的demo9
    45. submitID:触发表单提交的按钮ID值

      参数值:表单提交按钮的ID值,默认在form表单上绑定submit以同步结果
      说明:通过本参数,在非标准submit提交环境下,比如AJAX提交,可以由用户点击提交按钮以触发编辑器最新值的同步
      备注:v1.1.7新添加
    46. onPaste:剪切板粘贴回调函数

      参数值:用户粘贴后需要执行的函数
      说明:此函数用来过滤用户粘贴的代码,若返回false禁用粘贴
      备注:v1.1.8新添加
    47. localUrlTest:非本站域名测试正则表达式

      参数值:正则表达式
      说明:本参数用来测试某些组件中测试URL是否属于本站域名
      备注:v1.1.8新添加
    48. remoteImgSaveUrl:远程图片抓取接收程序URL

      参数值:字符串(若不设置不开启此功能)
      说明:当localUrlTest测试为false时,会将图片URL发往当前参数指定的服务器端上传接收程序,抓取成功后将本地URL返回并替换
      备注:v1.1.8新添加
    49. readTip:无障碍读屏提示

      参数值:字符串(默认为空)
      说明:无障碍读屏软件提示文字,可用来为残疾人士提示快捷键等信息
      备注:v1.1.9新添加

     

    2.3. API函数接口列表

    API接口示例代码:

    var editor=$('#elm1').xheditor({tools:'full',skin:'default'});
    editor.focus();
    editor.setSource('str')
    sHtml=editor.getSource()
    editor.appendHTML('<p>aaa</p>')
    editor.pasteHTML('<p>aaa</p>')
    editor.pasteText('str')
    sHtml=editor.formatXHTML('<b>aaa</b>')
    editor.toggleSource()
    editor.toggleFullscreen()
    alert(editor.settings.upImgExt);
    editor.settings.upImgExt='txt,doc';

    API接口列表:

    1. focus:使编辑器获得焦点

      无参数
    2. setSource:设置编辑器源代码

      参数1:要设置的源代码内容,例:'<p>aaa</p>'
    3. getSource:返回编辑器格式后的源代码

      无参数
    4. appendHTML:粘贴HTML内容到编辑器结尾处

      参数1:要粘贴的HTML代码,例:'<p>uuu</p>'
      注:0.9.5版添加
    5. getSelect:返回当前选中的内容

      参数1:返回格式,可选'text'返回文本格式,其它所有值都返回HTML格式
    6. pasteHTML:粘贴HTML内容到编辑器当前光标处

      参数1:要粘贴的HTML代码,例:'<p>uuu</p>'
      参数2:是否覆盖粘贴,留空(覆盖粘贴)、true(粘贴在光标选择区域之前)、false(粘贴在光标选择区域之后)
    7. pasteText:粘贴文本到编辑器当前光标处

      参数1:要粘贴的文本,例:'这里的内容完全原样显示<strong>aaa</strong>'
      参数2:是否覆盖粘贴,留空(覆盖粘贴)、true(粘贴在光标选择区域之前)、false(粘贴在光标选择区域之后)
    8. formatXHTML:格式化XHTML代码

      参数1:需要格式化的HTML代码,例:'<b>aaa</b>',返回'<strong>aaa</strong>'
      参数2:是否代码缩进换行,true(执行缩进格式化),false(不执行缩进格式化),默认为false
    9. toggleSource:在源代码模式和编辑模式之间切换

      参数1:空(切换),true(显示源代码模式),false(显示编辑模式)
    10. toggleFullscreen:在全屏模式和标准大小之间切换

      参数1:空(切换),true(显示全屏模式),false(显示标准模式)
    11. toggleShowBlocktag:切换块标签显示状态

      参数1:空(切换),true(切换为显示块标签),false(切换为不显示块标签)
    12. addShortcuts:添加快捷键

      参数1:快捷键值,例:'ctrl+enter'
      参数2:用户按下快捷键后需要响应的程序代码,例:function(){$('#frmTest').submit();}
      说明:允许为某个相同快捷键值重复添加多个响应代码
      备注:1.0.0 beta2新添加
    13. delShortcuts:删除快捷键

      参数1:快捷键值,例:'ctrl+enter'
      
      备注:1.0.0 Final新添加
    14. exec:立即执行按钮及插件

      参数1:工具按钮名称(不区分大小写),例:Link、img
      说明:此函数可以在插件内部或者外部Javascript代码中进行调用
    15. showModal:显示模式窗口

      参数1:模式窗口的标题title
      参数2:模式窗口的内容content
      参数3:模式窗口的宽度w
      参数4:模式窗口的高度h
      参数5:模式窗口关闭时的回调函数onRemove
    16. showIframeModal:显示iframe式的模式窗口

      参数1:模式窗口的标题
      参数2:iframe的地址ifmurl,可使用内置变量:{editorRoot},代表当前编辑器的根路径,例:{editorRoot}xheditor_plugins/test.html
      参数3:提供给目标iframe页面回调用的回调函数,可以在iframe页面中以这样的形式调用:callback('1.gif');
      参数4:模式窗口的宽度w
      参数5:模式窗口的高度h
      参数6:模式窗口关闭时的回调函数onRemove
    17. settings:获取或者修改编辑器内部参数

      internalScript:是否清除内部代码
      inlineScript:是否清除内联代码
      internalStyle:是否清除内部样式
      inlineStyle:是否清除内联样式
      forcePtag:强制使用P标签
      upLinkUrl:超链接上传接口地址
      upLinkExt:超链接本地上传扩展限制
      upImgUrl:图片上传接口地址
      upImgExt:图片本地上传扩展限制
      upFlashUrl:动画上传接口地址
      upFlashExt:动画本地上传扩展限制
      upMediaUrl:视频上传接口地址
      upMediaExt:视频本地上传扩展限制
      beforeSetSource:在设置源代码到编辑器前调用此函数
      beforeGetSource:从编辑器返回源代码前调用此函数
      focus:编辑器获得焦点时回调此函数
      blur:编辑器失去焦点时回调此函数
      
      注:修改有效变量仅限以上,其它的变量都仅在编辑器初始化时使用

     

    2.4. 上传程序开发规范

     

    上传接收程序开发必读:

    • 上传程序分标准HTML4上传和HTML5上传两种情况处理:
      1, HTML4上传使用标准的表单上传域,上传文件域的name为:filedata
      2, HTML5上传的整个POST数据流就是上传的文件完整数据,而本地文件名等信息储存于HTTP_CONTENT_DISPOSITION这个服务器变量中
    • 返回内容必需是标准的json字符串,结构可以是如下:{"err":"","msg":"200906030521128703.gif"} 或者 {"err":"","msg":{"url":"200906030521128703.jpg","localfile":"test.jpg","id":"1"}} 注:若选择结构2,则url变量是必有

    需了解更多细节,请参考发行包中的demos文件夹。其中upload.php、upload.asp、upload.aspx仅为演示参考代码,若您使用的是其它的服务器脚本语言,请自行对初始化参数中的upLinkUrl、upImgUrl、upFlashUrl和upMediaUrl进行修改,并开发相应服务器上传接收程序。若您希望在自己的项目中实际使用,请自行修改代码或者重新开发,开发过程中请注意上传文件的格式及大小限制,注意服务器脚本安全问题。

     

    上传文件管理建议方案:

    • 在编辑器初始化时在upload.php后面跟上一个服务器生成的绝对唯一的跟踪值,例如:upload.php?infoid=123
    • 在服务器接收程序中以这个跟踪值保存到数据库中,同时也可以限制单个跟踪值下总上传文件数或者总文件大小,否则就是一个可以上传无限个文件的漏洞了
    • 最终当前表单提交时,再根据编辑器提交的HTML内容和数据库中上传内容进行比较,删除所有没有使用的上传文件
    • 定期由服务器脚本删除上传数据库中没提交的文件记录,这样就能防止别人将你的网站作为免费相册空间了

     

    2.5. 插件开发指南

    标准插件开发流程:

    1. 设计插件图标并在页面中定义好CSS
    2. 定义插件参数并写入初始化参数plugins
    3. 编写插件调用时要执行的代码

    下面我们就demo09中的一个最简单插件作介绍:

    <style type="text/css">
    .testClassName {
            background:transparent url(img/plugin.gif) no-repeat 20px 20px;
            background-position:3px 3px;
    }
    </style>
    test7:{c:'testClassName',t:'测试7:showIframeModal (Ctrl+7)',s:'ctrl+7',i:function(editor){
        editor.setSource('test');
    },e:function(){
        var _this=this;
        _this.saveBookmark();
        _this.showIframeModal('测试showIframeModal接口','uploadgui.html',function(v){
            _this.loadBookmark();
            _this.pasteText('返回值:\r\n'+v);
        },500,300);
    }}

    这个插件实现的功能是打开一个iframe,并将iframe返回的参数字符串插入到当前编辑器光标处。

    • 其中test7为插件的name,用来在tools初始化参数中调用
    • c:'testClassName'为插件的样式名称
    • t:'测试7:showIframeModal (Ctrl+7)'是鼠标放在按钮上显示的提示文字
    • s:'ctrl+7'是定义插件的快捷方式,在编辑器区域里按设置的快捷方式就会执行此插件事件;
    • i:function(){}为插件初始化函数,编辑器初始化完成后会调用此函数
    • e:function(){}为插件点击后要执行的代码

    特别说明:

    1. 插件执行函数中可以用this.的方式调用2.3.章节中所有的API接口函数。如果使用回调函数,请将this变量保存在临时变量中,例如_this;
    2. 在某些浏览器下,打开会转移焦点的操作界面,会导致编辑区域焦点丢失。例如:showIframeModal,在showIframeModal之前要先执行saveBookmark保存焦点,再在回调函数中执行loadBookmark函数恢复焦点,之后才能调用pasteHTML等函数;
    3. 如果希望样式表存储在系统自带的模板目录ui.css中,请将插件对象样式名留空,则会自动按照插件名来调用相应的样式,例如:xhEdtBtnCut、xhEdtBtnCopy,其中的Cut和Copy是插件名;

    2.6. 皮肤设计指南

    xhEditor的皮肤保存在xheditor_skin文件夹中,每个皮肤一个子文件夹,文件夹结构如下:

    xheditor_skin
      └─default
          ├─ui.css
          ├─iframe.css
          └─img
              ├─icons.gif
              ├─...
              └─loading.gif
    • 编辑器按钮、面板、模式窗口等样式全部统一存储在ui.css文件中
    • 编辑区域的样式存储在iframe.css文件中
    • 编辑器内核用到的图片及css文件中用到的所有图片统一存储在img文件夹中

    ui.css文件简单解析

    xheLayout:编辑器table样式;xheTool:工具按钮所在区域的样式;xheButton:按钮样式;xhePanel:操作面板的样式;xheMenu:菜单样式;xheEmot:表情样式;xheColor:颜色选择器的样式;xheDialog:面板上的对话框样式;xheModal:模式窗口样式;

    xhEditor皮肤结构相对非常简单,有一定的HTML和CSS设计基础即可完成设计工作。

    展开全文
  • js基础-富文本编辑

    千次阅读 2017-09-21 10:30:27
    最先的富文本编辑,就是页面中嵌入一个包含空HTML页面的iframe,然后通过设置designMode属性,这个空白的HTML页面就可以编辑了,编辑对象则是该页面元素的HTML代码。 designMode属性有两个可能的值:“off”和...
  • 最佳文本编辑

    万次阅读 2007-03-02 11:46:00
    原文:donationcoder.com  译者:xbeta@善用佳软 说明:仅做翻译...不代表同意文中观点(xbeta认为最好的编辑器为VIM)。 最佳文本编辑器 当前,好用的文本编辑器比比皆是——无论商业软件还是免费软件。如果你用得
  • linux退出编辑状态

    千次阅读 2019-02-13 17:16:15
    1:进入编辑状态是vim XXX 2:退出首先按下esc,接下里输入:wq;退出
  • 关于文本编辑器Vim的使用

    千次阅读 2009-09-12 02:14:00
    进入按i进入编辑界面。 退出:按Esc进入命令模式,按ZZ(大写,两个)即可存盘退出。另外,按" :q ”退出vim,按" :q! "强制退出、按" :w " 保存文档、按" :w! "强制保存。 2.打开保存过的文本:vim filename 
  • VC++文本编辑器使用

    千次阅读 2008-01-16 23:33:00
    虽然该文本编辑器和其他基于Windows文本编辑器软件(如Windows 98的记事本)的大多数功能是相同的,但它是集成Visual C++6.0开发环境中,一旦文档窗口中的源代码文件被打开,就可以使用了,且增加许多帮助快速键入...
  • vim 选择文本,删除,复制,粘贴 文本的选择,对于编辑器来说,是很基本的东西,也经常被用到,总结如下:v 从光标当前位置开始,光标所经过的地方会被选中,再按一下v结束。V 从光标当前行开始,光标经过的行...
  • Linux的文本编辑和文本内容查看命令

    千次阅读 2018-02-28 09:41:39
    Linux的文本编辑和文本内容查看命令 1、文本编辑命令 vi:用于编辑文本文件,基本上可以分为三种模式,分别是一般模式、编辑模式、命令行模式。  一般模式:当编辑一个文件时,刚进入文件就是一般模式。  ...
  • 第一章 vi文本编辑器 第二章 简单编辑 (一) 移动光标 (二) 简单编辑 (三) 插入文本的常用方法 (四) 使用J合并两行 (五) 回顾基本的vi命令
  • 用DIV做文本编辑

    千次阅读 2016-06-29 16:42:34
    几年前DIV+CSS是前端工作者所必须掌握的核心能力。但是,今天的这个属性并不是热门属性, contenteditable一个瞬间可以让div化身为富文本输入框的属性。 基本倒腾 这属性真有那么神? 为了验证它真正的...
  • python tkinter 自制文本编辑

    千次阅读 2018-11-10 20:31:17
    成品如图: 代码 from tkinter ..."自制文字编辑器" ...#复制功能函数 ...#全选文本函数 ...#文字编辑区text ...主要功能都具有了,诸如插入文本,图片,保存,复制,删除等等内容。 做点东西激励一下自己。
  • vi,vim文本编辑

    万次阅读 2019-10-21 11:32:17
    由于Unix和linux系统下的任何版本,vi编辑器是完全相同的,因此可以其他任何介绍vi 的地方都能进一步了解它,vi也是linux中最基本的文本编辑器,学会它,可以linux的世界畅通无阻,尤其是终端中。...
  • 实际项目开发中最常使用到的工具之一就是富文本编辑器,使用富文本编辑器可以实现所见即所得的效果,且所有富文本编辑器里的内容(包括图片,视频,音乐等文件)全部可以带格式的存入数据库中且只需占用一个字段。...
  • 屏幕文本编辑器Vi

    千次阅读 2004-07-06 14:15:00
    本章介绍Linux上最常用的文本编辑器Vi。文本编辑器是所有计算机系统中最常使用的一种工具。用户使用计算机的时候,往往需要建立自己的文件,无论是一般的文本文件、数据文件,还是编写的源程序文件,这些工作都离...
  • 文本编辑器nano使用

    千次阅读 2018-08-14 22:09:33
     nano是Unix和类Unix系统中的一个文本编辑器,是Pico的复制品(clone)。nano的目标是类似Pico的全功能但又易于使用的编辑器。 nano是遵守GNU通用公共许可证的自由软件,自从2.0.7版发布,许可证从GPLv2升级到GPLv...
  • gedit文本编辑器 windows版 v2.30.1.0

    千次阅读 2019-09-09 14:11:51
    gedit是一款GNOME桌面环境下兼容UTF-8运行的文本编辑器。相比于windows本身自带的文本编辑器功能更全面,因为gedit使用GTK+编写而成,因此十分的简单易用,有良好的语法高亮,对中文支持很好,能让用户更快时间...
  • 多文档文本编辑器(Qt)

    千次阅读 2018-10-17 20:53:28
    废了一下午的时间,结合着课本终于把这个实例给弄出来了,中间错误百出,真是学习的过程... 下面写的是使用C++的Qt界面设计的一个多文本编辑器,界面好看了许多,而且操作起来不存在bug,功能上可能少一点,没有添加...
  • 玉兔项目中我们的文本组件使用的contentEditable属性与execCommand方法结合开发出来的简洁文本编辑器。 HTML中的contentEditable属性 contentEditable属性的作用是可以打开某些元素的可编辑状态,可供...
  • c#asp,web文本编辑

    千次阅读 2011-08-19 10:22:41
    如何用C#编写文本编辑器 摘要  本文探讨了使用C#从底层开发一个带格式的文本编辑器的任务,深入探讨了其中的文档对象模型的设计,图形化用户界面的处理和用户操作的响应,说明了其中的某些技术问题和解决之...
  • C#富文本编辑器处理文章

    千次阅读 2019-05-08 13:19:52
    页面要用到富文本编辑器,要项目里引入富文本编辑器的插件ckeditor,使用的时候需要渲染,渲染使用到富文本编辑器自身的方法。插件所包含的内容如下截图: 渲染富文本编辑器插件:其渲染富文本编辑器是,通过...
  • Markdown的语法简洁明了、学习容易,而且功能比纯文本更强,因此有很多人用它写博客。本文想借助此开源产品,应用到管理信息系统中,提升系统平台在线编辑能力。
  • 文本编辑的利器execCommand

    千次阅读 2013-11-26 13:59:44
    文本编辑中一个非常关键的document属性execCommand(command,boole,val);这个属性可以得到并且编辑我们当前选则文档节点内容。 我们上一节讲过createRange以及createTextRange,都是针对文档去创建并保存一个range...
  • VS Code 文本编辑快捷键精选.md

    千次阅读 2018-10-06 15:14:24
    VS Code 文本编辑快捷键精选 引言 VS Code 是非常适合新手的编辑器,我当初试用了许多种编辑器最终选定它。它的轻巧、灵活、高度可定制、高度可拓展,令人爱不释手。诚然编辑文本方面它无法与 Vim 等神器相比,...
  • wangeditor富文本编辑器的一些坑

    千次阅读 2019-04-04 01:11:51
    看到CSDN都用wangeditor而且用起来的确简单,可是图片上传还是一直搞不定。 1.返回格式问题 官方要求返回json格式,先定义字典赋值,然后采用json.dumps(result,ensure_ascii=False)进行后端返回: { "errno...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 112,739
精华内容 45,095
关键字:

在文本编辑状态进行复制后