相关疑难解决方法(0)

JavaScript在粘贴事件上获取剪贴板数据(跨浏览器)

Web应用程序如何检测粘贴事件并检索要粘贴的数据?

我想在将文本粘贴到富文本编辑器之前删除HTML内容.

之后粘贴后清理文本有效,但问题是所有以前的格式都丢失了.例如,我可以在编辑器中编写一个句子并将其设为粗体,但是当我粘贴新文本时,所有格式都会丢失.我想只清理粘贴的文本,并保持以前的格式不变.

理想情况下,该解决方案应适用于所有现代浏览器(例如,MSIE,Gecko,Chrome和Safari).

请注意,MSIE有clipboardData.getData(),但我找不到其他浏览器的类似功能.

javascript clipboard cross-browser

281
推荐指数
10
解决办法
33万
查看次数

contenteditable,在文本末尾设置插入符号(跨浏览器)

Chrome中的输出:

<div id="content" contenteditable="true" style="border:1px solid #000;width:500px;height:40px;">
    hey
    <div>what's up?</div>
<div>
<button id="insert_caret"></button>
Run Code Online (Sandbox Code Playgroud)

我相信FF看起来像这样:

hey
<br />
what's up?
Run Code Online (Sandbox Code Playgroud)

IE中:

hey
<p>what's up?</p>
Run Code Online (Sandbox Code Playgroud)

不幸的是,没有很好的方法来制作它,以便每个浏览器插入一个<br />而不是div或p-tag,或者至少我在网上找不到任何东西.


无论如何,我现在要做的是,当我按下按钮时,我希望将插入符号设置在文本的末尾,所以它应该看起来像这样:

hey
what's up?|
Run Code Online (Sandbox Code Playgroud)

任何方式这样做,所以它适用于所有浏览器

例:

$(document).ready(function()
{
    $('#insert_caret').click(function()
    {
        var ele = $('#content');
        var length = ele.html().length;

        ele.focus();

        //set caret -> end pos
     }
 }
Run Code Online (Sandbox Code Playgroud)

html javascript cross-browser caret contenteditable

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

如何将光标移动到可信实体的末尾

我需要contenteditable像在Gmail备注小部件上一样将插入符移动到节点的末尾.

我在StackOverflow上读取了线程,但这些解决方案基于使用输入,它们不适用于contenteditable元素.

javascript contenteditable cursor-position

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

jquery在contenteditable div中设置光标位置

问题的旧版本如下,在研究了更多之后,我决定重新解释这个问题.像以前一样的问题是,我需要在没有突出显示文本的情况下关注一个可信的div,直接进行焦点突出显示Chrome中的文本.

我意识到人们通过重置textarea中的插入位置来解决textareas中的这个问题.我怎么能用一个满足的元素来做到这一点?我试过的所有插件只适用于textareas.谢谢.

问题的老措辞:

我有一个我想要关注的可满足的元素,但只是将光标放在元素的前面,而是选择所有内容.

elem.trigger('focus');使用jquery选择chrome中整个元素中的所有文本.Firefox行为正确,将插入符号设置在文本的前面.我怎样才能让Chrome按照我想要的方式行事,或者重点关注的可能不是我想要的.

谢谢大家.

jquery focus caret contenteditable cursor-position

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

从剪贴板Firefox获取粘贴图像

我试图让用户将图像粘贴到div.问题是我需要它在Firefox中工作.

根据我的阅读,自版本13以来的Firefox(我认为)不允许JavaScript访问剪贴板,并且event.clipboard不存在于剪贴板中.我知道它可以做到,因为Gmail和雅虎甚至在Firefox中也是如此.

我只是希望它无论如何都可以工作,使用jQuery,JavaScript,HTML5,只要它在最新的Firefox中工作就没关系.(虽然没有Flash).

html javascript firefox jquery html5

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

使用contenteditable div获取并设置光标位置

我有一个令人满意的div,我希望能够让用户插入链接,图像或YouTube视频等内容.目前这就是我所拥有的:

function addLink() {
  var link = $('#url').val();
  $('#editor').focus();
  document.execCommand('createLink', false, link);
}
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<!-- Text Editor -->
<div id="editor" contenteditable="true"></div>

<!-- Add Link -->
<input type="text" id="url">
<button onclick="addLink()">Submit</button>
Run Code Online (Sandbox Code Playgroud)

如您所见,用户必须输入单独的文本框才能输入链接地址.因此,当链接添加到编辑器时,它不会添加到指针/插入符所在的位置.

我的问题是如何获取和设置指针/插入符的位置.我已经看到了其他问题,例如设置指针,但是我希望有一个在所有现代浏览器中都支持的解决方案,包括Chrome,Safari,Firefox和IE9 +.

有任何想法吗?谢谢.

编辑:

我发现下面的代码获取位置,但它只根据它所在的行获取位置.例如,如果我有这个(|光标在哪里):

This is some text
And som|e more text
Run Code Online (Sandbox Code Playgroud)

然后我将返回值7,而不是24.

function getPosition() {
    if (window.getSelection) {
        sel = window.getSelection();
        if (sel.getRangeAt) {
            return sel.getRangeAt(0).startOffset;
        }
    }
    return null;
}
Run Code Online (Sandbox Code Playgroud)

html javascript jquery

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

更改contenteditable后恢复光标位置

有像这样的HTML:

<div contenteditable="true" class="value research-form thumbnail">
 Some text here
 </div>
Run Code Online (Sandbox Code Playgroud)

div的内容应该动态地突出显示某些单词,而用户类型例如:

 <div contenteditable="true" class="value research-form thumbnail">
 Some text here <span style="background-color: yellow">highlight</div> it
 </div>
 <script>
    $(document).ready(function () {
        var input = $('#textarea').on('input', function (event) {
            var newText = input.text().replace('highlight', '<span style="background-color: yellow">highlight</div>');
            input.html($.parseHTML(newText));
        });
    });
</script>
Run Code Online (Sandbox Code Playgroud)

但是有一个问题:当我在div光标中刷新文本时,在输入文本的开头移动.

有没有办法在更改contenteditable值后恢复光标位置?或者也许有其他方法可以获得相同的效果?

html javascript jquery contenteditable

13
推荐指数
1
解决办法
4450
查看次数

用Javascript移动光标位置?

我希望将插入符号正好位于其当前位置前方四个位置,以便我可以正确插入一个标签.我已经在插入符号的位置处获得了HTML插入,但是当我插入HTML时,插入符号被遗忘.我花了大约一个小时左右的时间看各种方法来做这件事,我已经尝试了很多,但我不能让他们中的任何一个为我工作.这是我尝试过的最新方法:

function moveCaret(input, distance) {
    if(input.setSelectionRange) {
        input.focus();
        input.setSelectionRange(distance, distance);
    } else if(input.createTextRange) {
        var range = input.createTextRange();
        range.collapse(true);
        range.moveEnd(distance);
        range.moveStart(distance);
        range.select();
    }
}
Run Code Online (Sandbox Code Playgroud)

它绝对没有 - 不移动插入符,抛出任何错误或任何东西.这让我感到困惑.是的,我知道上面的方法集(应该)将插入符号从指定节点的开头(即input)开始设置在某个位置,但即使这样也不起作用.那么,我究竟做错了什么,我该怎么做呢?


编辑:基于ov提供的链接,我已经设法将一些东西拼凑在一起,最终做了一些事情:抛出一个错误.好极了!这是新代码:

this.moveCaret = function(distance) {
    if(that.win.getSelection) {
        var range = that.win.getSelection().getRangeAt(0);
        range.setStart(range.startOffset + distance);
    } else if (that.win.document.selection) {
        var range = that.win.document.selection.createRange();
        range.setStart(range.startOffset + distance);
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,这给出了错误Uncaught Error: NOT_FOUND_ERR: DOM Exception 8.有什么想法吗?

javascript caret contenteditable

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

修改contenteditable div中的文本而不重置插入符(光标)位置

我试图取代的任何实例/any thing in here/<b>/any thing in here/</b>上飞,因为变化在CONTENTEDITABLE DIV制作.

我当前的实现工作正常,但是在每个按键时,插入符被移动到div的开头,使得实现无法使用.在替换div的内容时是否有某种方法可以保持插入位置?

$('.writer').on('keyup', function(e) {
     $(this).html($(this).html().replace(/\/(.*)\//g, '<b>\/$1\/<\/b>'));
});
Run Code Online (Sandbox Code Playgroud)

html javascript regex jquery contenteditable

8
推荐指数
1
解决办法
2500
查看次数

焦点内容可编辑的div

我想聚焦 contenteditable div,这样我就可以在插入 DOM 时自动开始输入

我试过了$('.content').focus(),但这不起作用

示例 html:

<div class="content" contenteditable="true">sample input</div>
Run Code Online (Sandbox Code Playgroud)

html javascript jquery reactjs

6
推荐指数
1
解决办法
7173
查看次数

在 contentEditable="true" DIV 中修改 innerHTML 会导致失去焦点或错误选择

这是完整的页面:

<html>
<head>
<title>Test</title>
<style type="text/css">
  .edit { border: 1px solid blue; font-size: 20pt }
</style>
<script type="text/javascript">
  function clean(id) {
    setTimeout('clean2("'+id+'")', 1)
  }
  function clean2(id) {
    el=document.getElementById(id)
    off=window.getSelection().anchorOffset
    el.innerHTML = el.innerHTML.replace(/(<([^>]+)>)/ig,""); 
    el.innerHTML = el.innerHTML.replace(/([0-9])/ig,"<font color='red'>$1</font>");
    return false;
  }
</script>
</head>

<body onload="document.getElementsByClassName('edit')[0].focus()">

<h1>Type in here</h1>
<div id="e1" class="edit" contentEditable="true" onkeyup="clean('e1')"></div>

</body>
</html>
Run Code Online (Sandbox Code Playgroud)

这里的目标是用红色突出显示所有数字。(将来我实际上会使用更复杂的着色规则)。目前这种颜色替换正在发生,但是一旦您向框中添加一个数字,焦点就会丢失。

任何提示?(使用 Chorme 开发)

html javascript contenteditable

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

内容可编辑光标位置

我有一个内容可编辑的div,我希望点击编辑按钮,光标出现在div的开头,在它结束时出现的那一刻.

<li style="display: list-item;" class="menu-item" contenteditable="true">
<div class="">Dior<input type="checkbox" name="selected"></div>
<ol class="">
    <li style="display: list-item;" class="menu-item">
    <div class=""><a href="/portfolios/charlize-theron" class="" name="">Charlize-Theron</a>
    <input type="checkbox" name="selected"></div>
    </li>
    <li style="display: list-item;" class="menu-item">
    <div class=""><a href="/portfolios/natalie-portman" class="" name="">Natalie-Portman</a>
    <input type="checkbox" name="selected"></div>
    </li>
    <li style="display: list-item;" class="">
    <div class=""><a href="/portfolios/sharon-stone-1" class="" name="">Sharon-Stone</a>
    <input type="checkbox" name="selected"></div>
    </li>
</ol>
<a href="#" class="edit" style="opacity: 1; ">Edit</a></li>
Run Code Online (Sandbox Code Playgroud)

因此,当您在分钟点击编辑时,您必须使用箭头键返回到开始编辑Dior(这是唯一真正被编辑的东西).但我试图将内容可编辑的代码添加到div只有它不起作用.

这是我的一些jQuery

$(".edit").click(function(){
            $(this).parent().children("div").focus(function(){

            });
        });

        $(".edit").hover(function(){
            $(this).css("opacity","0.5")
        }, function(){
            $(this).css("opacity","1")
        });

        $(".edit").parent().blur(function(){
            var sortableList = $(".sortable").html();
            $("#ItemDescription").val(sortableList);
        });

function storeUserScribble(id) { …
Run Code Online (Sandbox Code Playgroud)

jquery contenteditable

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