2014-01-26 105 views
3

我捅了一下,发现没有办法在div contenteditable中找到当前行,所以我正在尝试编写一个脚本来最好地估计当前行。获取contenteditable div的当前行吗?

var curLine = 1; 
var curColumn = 1; 

$(".editable").onkeydown = function(e) { 
    var keyCode = e.keyCode || e.which; 

    switch(keyCode) { 
     case 13: 
      console.log("Enter; on line: " + curLine); 
      curLine++; 
      break; 

     case 8: 
      if(/* current line has a text length of 0 */) { 
       console.log("Previous line prepended; previous enter reversed; on line: " + curLine); 
       do { 
        curLine--; 
       } while(curLine > 0); 
      } 
      // } else if(/* single digit removed */) { 
       // console.log("Bit prepended"); 
      // } 
      break; 
    } 
};   

所以,你可以看到,我有几个问题。这个位:if(/* current line has a text length of 0 */)我似乎无法定位当前行,并查看它的字符串长度是否为0.同样,我的do...while语句不起作用,就好像我一遍又一遍地在第一行上退格,它会变成负数(当它应该停留在1 [> 0])。任何帮助将不胜感激。

回答

0

这在Chrome中适用于我。现在将在其他浏览器中测试:

$(".editable").on("keyup", function(keyCode){ 
    var linesCount = $(".editable div").length + 1; 
    $("#linesCount").html(linesCount + " lines."); 
    return linesCount; 
}); 

对于每行,内容可编辑div将创建一个新的div子。如果您计算这些div,您将获得总数的行数。

http://jsfiddle.net/hescano/PypeD/

编辑:对于FF这实际上产生<br>标签。你可以数这些。

FF:http://jsfiddle.net/PypeD/1/

+1

谢谢!然而,我意识到的一件事是,如果用户说5行,然后点击3行,那么在用户开始输入之前无法分辨。但我想这就是关键。再次感谢! –

+0

干净简洁。我喜欢它。不幸的是,如果您粘贴来自其他来源的文本,则FF方法不起作用。试着在多个浏览器上试用Chrome版本,并了解它现在的工作原理。 –

+0

...有没有理由不计算'\ n' ..? – nbrogi