jquery – 处理行中的contentEditable DIV

前端之家收集整理的这篇文章主要介绍了jquery – 处理行中的contentEditable DIV前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个问题在SAFARI / CHROME的contenteditable换行。当我在contentEditable< div>上按下“return”,而不是创建< br> (如Firefox),他们会创建一个新的< div&gt ;:
<div>Something</div>
<div>Something</div>

看起来像(在contentEditable DIV):

Something
Something

但是在消毒(移除< div>)后,我得到这样:

SomethingSomething

在Firefox中,contenteditable是:

Something
<br>
Something

并且在消毒后看起来是一样的:

Something
Something

有没有任何解决方案,以“正常化”跨浏览器?

我发现这个代码Make a <br> instead of <div></div> by pressing Enter on a contenteditable

$(function(){

  $("#editable")

  // make sure br is always the lastChild of contenteditable
  .live("keyup mouseup",function(){
    if (!this.lastChild || this.lastChild.nodeName.toLowerCase() != "br") {
      this.appendChild(document.createChild("br"));
     }
  })

  // use br instead of div div
  .live("keypress",function(e){
    if (e.which == 13) {
      if (window.getSelection) {
        var selection = window.getSelection(),range = selection.getRangeAt(0),br = document.createElement("br");
        range.deleteContents();
        range.insertNode(br);
        range.setStartAfter(br);
        range.setEndAfter(br);
        range.collapse(false);
        selection.removeAllRanges();
        selection.addRange(range);
        return false;
      }
    }
  });
});

这工作,但(在SAFARI和CHROME),我必须按两次“返回”键得到一个新的行…

任何想法?

编辑:我找到的代码(在这个问题的底部)是工作正常,除了“确保一个< br>元素总是lastChild的功能。任何想法如何解决这个?

编辑2:我在控制台得到这个错误:Uncaught TypeError:Object#< HTMLDocument>没有方法“createChild”

编辑3:好的,我改变了document.createChild(“br”); to document.createElement(“br”);我想我的工作在FF / Safari / Chrome …所有返回< br>为新行…

现在的问题是,当我在一个有序或无序列表,我需要一个新的行,没有< br> …

编辑4:如果任何人感兴趣的解决方案的最后一次编辑:Avoid createElement function if it’s inside a <LI> element (contentEditable)

解决方法

这种技术似乎避免了第一次显示BR的Chrome错误(使用您提到的代码,您需要按两次Enter键)。

这不是一个完美的黑客,但它的工作原理:它添加一个空白后你的BR,以便它正确显示
但是,你会看到只添加一个空格“”不会改变任何东西,它可以与其他字母。浏览器不会显示它,可能是因为它像html页面中的空白空间,它根本不是什么意思。为了摆脱这个bug,我创建了一个与jQuery的div,包括一个&标签,我采取的text()属性将其放在textnode否则它不工作。

$editables = $('[contenteditable=true]');

$editables.filter("p,span").on('keypress',function(e){
 if(e.keyCode==13){ //enter && shift

  e.preventDefault(); //Prevent default browser behavior
  if (window.getSelection) {
      var selection = window.getSelection(),br = document.createElement("br"),textNode = document.createTextNode("\u00a0"); //Passing " " directly will not end up being shown correctly
      range.deleteContents();//required or not?
      range.insertNode(br);
      range.collapse(false);
      range.insertNode(textNode);
      range.selectNodeContents(textNode);

      selection.removeAllRanges();
      selection.addRange(range);
      return false;
  }

   }
});
原文链接:/jquery/185460.html

猜你在找的jQuery相关文章