javascript - 知乎div编辑器,@功能的光标定位问题
迷茫
迷茫 2017-04-11 10:50:41
[JavaScript讨论组]

我今天拜读了一下知乎编辑器的js代码,发现那个@功能其实好像可以分为:

  1. 获取@符号的位置

  2. 清除@符号

  3. 在@符号的位置上将将抓取到的字符串x以@x的形式添加进去

  4. 将焦点定位到@X上
    这四个步骤不知道个人理解得对不对,这个用selection.createRange()是怎么实现的呢?不知如何下手写这个功能。

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(2)
迷茫

你说的是

var range = document.createRange();
range.selectNode(node); // node is where you need the caret to be (with contenteditable)
range.collapse();

var selection = document.getSelection();

selection.removeAllRanges();
selection.addRange(range);
伊谢尔伦

很艰难地找到了一个能用的代码样例:

<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title></title>
    <link rel="stylesheet" href="//code.jquery.com/ui/1.10.4/themes/smoothness/jquery-ui.css">
    <script src="//code.jquery.com/jquery-1.9.1.js"></script>
    <script src="../tpok/js/jquery-ui.min.js"></script>
    <link rel="stylesheet" href="http://jqueryui.com/resources/demos/style.css">
    <script>




        $(function () {
            var availableTags = [
                "ActionScript",
                "AppleScript",
                "Asp",
                "BASIC",
                "C",
                "C++",
                "Clojure",
                "COBOL",
                "ColdFusion",
                "Erlang",
                "Fortran",
                "Groovy",
                "Haskell",
                "Java",
                "JavaScript",
                "Lisp",
                "Perl",
                "PHP",
                "Python",
                "Ruby",
                "Scala",
                "Scheme"
            ];
            $("#tags").autocomplete({
                source: availableTags,
                close: function(event, ui) {
                    var textObj = document.getElementById("tags");
                    po_Last_p(textObj);

                }
            });


        });

    </script>
    <script>

    </script>
</head>


<body>
<p class="ui-widget">
    <label for="tags">标签:</label>
    <p style="width:100px;height:50px;background:#ccc;" contenteditable="true" id="tags" ></p>
    <p style="width:100px;height:50px;background:#ccc;" contenteditable="true" id="tags2" >aaaa</p>
</p>
</body>
<script type="text/javascript">

    function po_Last_p(obj) {
        if (window.getSelection) {//ie11 10 9 ff safari
            obj.focus(); //解决ff不获取焦点无法定位问题
            var range = window.getSelection();//创建range
            range.selectAllChildren(obj);//range 选择obj下所有子内容
            range.collapseToEnd();//光标移至最后
        }
        else if (document.selection) {//ie10 9 8 7 6 5
            var range = document.selection.createRange();//创建选择对象
            //var range = document.body.createTextRange();
            range.moveToElementText(obj);//range定位到obj
            range.collapse(false);//光标移至最后
            range.select();
        }
    }

</script>



</body>
</html>
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号