标签: contenteditable

从contentEditable div中提取文本

我有一个div设置contentEditable并用" white-space:pre" 设置样式,所以它保持像linebreaks的东西.在Safari,FF和IE中,div几乎看起来和工作原理相同.一切都很好.我想要做的是从这个div中提取文本,但是这样的方式不会丢失格式 - 特别是换行符.

我们使用的是jQuery,它的text()功能基本上是预先订购的DFS,并将DOM的那个分支中的所有内容粘合成一个整体.这会丢失格式.

我看了一下这个html()函数,但似乎所有三个浏览器都使用在我的contentEditablediv中幕后生成的实际HTML做了不同的事情.假设我在我的div中输入:

1
2
3
Run Code Online (Sandbox Code Playgroud)

这些是结果:

Safari 4:

1
<div>2</div>
<div>3</div>
Run Code Online (Sandbox Code Playgroud)

Firefox 3.6:

1
<br _moz_dirty="">
2
<br _moz_dirty="">
3
<br _moz_dirty="">
<br _moz_dirty="" type="_moz">
Run Code Online (Sandbox Code Playgroud)

IE 8:

<P>1</P><P>2</P><P>3</P>
Run Code Online (Sandbox Code Playgroud)

啊.这里没有什么非常一致的.令人惊讶的是,MSIE看起来最健康!(大写P标签和所有)

div将动态设置样式(字体,颜色,大小和对齐),这是使用CSS完成的,所以我不确定我是否可以使用pre标记(我在使用Google找到的某些页面上提到过).

有没有人知道任何JavaScript代码和/或jQuery插件或从contentEditable div中提取文本以保留换行符的方式?如果我不需要,我宁愿不重新发明解析轮.

更新:我getText从jQuery 1.4.2中抄袭了这个函数并对其进行了修改以提取它,其中大部分空格完整(我只添加了一行,我添加了换行符);

function extractTextWithWhitespace( elems ) {
    var ret = "", elem;

    for ( var i = 0; elems[i]; i++ ) {
        elem = elems[i];

        // Get the text …
Run Code Online (Sandbox Code Playgroud)

html javascript css jquery contenteditable

46
推荐指数
2
解决办法
2万
查看次数

如何在contenteditable元素中用html替换所选文本?

使用contenteditable元素,如何用我自己的html替换所选内容?

javascript jquery contenteditable

46
推荐指数
2
解决办法
6万
查看次数

防止contentEditable中的行/段落中断

在Firefox中使用contentEditable时,是否可以通过按Enter或shift + enter来阻止用户插入段落或换行符?

javascript firefox contenteditable

43
推荐指数
7
解决办法
4万
查看次数

替换contenteditable div中的选定文本

我一直在高低寻找答案,但失败了.

是否有跨浏览器解决方案来替换contenteditable div中的选定文本?我只是希望用户突出显示一些文本并将突出显示的文本替换为xxxxx.

javascript contenteditable

42
推荐指数
1
解决办法
3万
查看次数

当contenteditable发生变化时触发事件

更改div值时,如何触发事件?

<div class="changeable" contenteditable="true"> Click this div to edit it <div>
Run Code Online (Sandbox Code Playgroud)

因此,当内容发生变化时,我想创建一个警报和/或做其他事情:

$('.changeable').text().change(function() {
  alert('Handler for .change() called.');
});
Run Code Online (Sandbox Code Playgroud)

jquery contenteditable

42
推荐指数
6
解决办法
5万
查看次数

AngularJS和contentEditable双向绑定不能按预期工作

为什么在以下示例中,初始渲染值{{ person.name }}不是David?你会如何解决这个问题?

这里有实例

HTML:

<body ng-controller="MyCtrl">
  <div contenteditable="true" ng-model="person.name">{{ person.name }}</div>
  <pre ng-bind="person.name"></pre>
</body>
Run Code Online (Sandbox Code Playgroud)

JS:

app.controller('MyCtrl', function($scope) {
  $scope.person = {name: 'David'};
});

app.directive('contenteditable', function() {
  return {
    require: 'ngModel',
    link: function(scope, element, attrs, ctrl) {
      // view -> model
      element.bind('blur', function() {
        scope.$apply(function() {
          ctrl.$setViewValue(element.html());
        });
      });

      // model -> view
      ctrl.$render = function() {
        element.html(ctrl.$viewValue);
      };

      // load init value from DOM
      ctrl.$setViewValue(element.html());
    }
  };
});
Run Code Online (Sandbox Code Playgroud)

contenteditable angularjs angularjs-directive

42
推荐指数
2
解决办法
3万
查看次数

HTML - DIV内容中的换行符可编辑吗?

我在数据库中存储内容,例如:

Hello
This
is 
Text
Run Code Online (Sandbox Code Playgroud)

当我将它传递给textarea时,它会保留新的换行符.但是,如果我将该文本传递给内容可编辑的div,它将保持如下:

Hello This is Text
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

html css html5 contenteditable

42
推荐指数
3
解决办法
4万
查看次数

使用contentEditable div而不是textarea有什么缺点?

我是否会通过使用具有属性contentEditable="true"作为文本字段而不是文本区域的div来拍摄自己的脚?

html javascript css contenteditable

40
推荐指数
3
解决办法
1万
查看次数

限制ContentEditable div中的字符数

我在我的Web应用程序中使用了contenteditable div元素,我正在尝试提出一个限制区域中允许的字符数量的解决方案,一旦达到限制,尝试输入字符就什么都不做.这是我到目前为止:

var content_id = 'editable_div';

//binding keyup/down events on the contenteditable div
$('#'+content_id).keyup(function(){ check_charcount(content_id, max); });
$('#'+content_id).keydown(function(){ check_charcount(content_id, max); });

function check_charcount(content_id, max)
{   
    if($('#'+content_id).text().length > max)
    {
        $('#'+content_id).text($('#'+content_id).text().substring(0, max));
    }
}
Run Code Online (Sandbox Code Playgroud)

此DOES将字符数限制为"max"指定的数字,但是一旦通过jquery .text()函数设置了区域的文本,光标就会将自身重置为该区域的开头.因此,如果用户继续键入,则新输入的字符将插入文本的开头,并且将删除文本的最后一个字符.所以,我只需要一些方法将光标保持在可信区域文本的末尾.

javascript jquery contenteditable

38
推荐指数
5
解决办法
5万
查看次数

如何选择contenteditable div中的所有文本?

在此之前被标记为重复之前,我希望您意识到没有人真正为这个特定问题提供了一个好的答案.在焦点/点击时选择contenteditable div中的所有文本,接受的答案和Tim Down的答案都没有帮助,因为它们仅在元素已经聚焦时才起作用.在我的情况下,我希望在单击按钮后选择contenteditable div中的所有文本,即使div未事先聚焦.

我怎么能这样做?

html javascript jquery contenteditable

36
推荐指数
2
解决办法
3万
查看次数