Extracting text from a contentEditable div

后端 未结 6 1934
囚心锁ツ
囚心锁ツ 2020-12-02 09:36

I have a div set to contentEditable and styled with \"white-space:pre\" so it keeps things like linebreaks. In Safari, FF and IE, the div pretty mu

6条回答
  •  [愿得一人]
    2020-12-02 10:32

    this.editableVal = function(cont, opts) 
    {
      if (!cont) return '';
      var el = cont.firstChild;
      var v = '';
      var contTag = new RegExp('^(DIV|P|LI|OL|TR|TD|BLOCKQUOTE)$');
      while (el) {
        switch (el.nodeType) {
          case 3:
            var str = el.data.replace(/^\n|\n$/g, ' ').replace(/[\n\xa0]/g, ' ').replace(/[ ]+/g, ' ');
            v += str;
            break;
          case 1:
            var str = this.editableVal(el);
            if (el.tagName && el.tagName.match(contTag) && str) {
              if (str.substr(-1) != '\n') {
                str += '\n';
              }
    
              var prev = el.previousSibling;
              while (prev && prev.nodeType == 3 && PHP.trim(prev.nodeValue) == '') {
                prev = prev.previousSibling;
              }
              if (prev && !(prev.tagName && (prev.tagName.match(contTag) || prev.tagName == 'BR'))) {
                str = '\n' + str;
              }
    
            }else if (el.tagName == 'BR') {
              str += '\n';
            }
            v += str;
            break;
        }
        el = el.nextSibling;
      }
      return v;
    }
    

提交回复
热议问题