首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >绑定到文本高亮显示

绑定到文本高亮显示
EN

Stack Overflow用户
提问于 2013-09-30 17:05:13
回答 3查看 2.4K关注 0票数 0

我试图将控制器操作绑定到文本区域、文本输入或内容可编辑中突出显示的文本。假设我有:

代码语言:javascript
复制
<input type="text" ng-model="name" placeholder="Enter Name">

使用角1.2.0,我如何观察文本框中突出显示的文本,并在页面上为用户显示一些内容?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-09-30 17:27:34

下面是使用$timeout的指令的一个相当粗略的实现。它可能通过监视mouseupkeyup (或者如果存在选择事件)而得到改进。

http://jsfiddle.net/4XDR8/1/

HTML

代码语言:javascript
复制
<div ng-app="app" ng-controller="TestCtrl">
    <input type="text" placeholder="Enter Name" ng-get-selection="name">
    {{name}}
    <br/>
    <br/>here select all this text down here
</div>

JavaScript:

代码语言:javascript
复制
var app = angular.module('app', []);

app.directive('ngGetSelection', function ($timeout) {
    var text = '';

    function getSelectedText() {
        var text = "";
        if (typeof window.getSelection != "undefined") {
            text = window.getSelection().toString();
        } else if (typeof document.selection != "undefined" && document.selection.type == "Text") {
            text = document.selection.createRange().text;
        }
        return text;
    }

    return {
        restrict: 'A',
        scope: {
            ngGetSelection: '='
        },
        link: function (scope, element) {
            $timeout(function getSelection() {
                var newText = getSelectedText();

                if (text != newText) {
                    text = newText;
                    element.val(newText);
                    scope.ngGetSelection = newText;
                }

                $timeout(getSelection, 50);
            }, 50);

        }
    };
});

app.controller('TestCtrl', function ($scope) {
    $scope.name = '';
});
票数 3
EN

Stack Overflow用户

发布于 2013-09-30 17:48:05

您可以创建一个指令来利用输入元素的selectionStartselectionEnd属性来实现您想要完成的任务,如下所示:

联署材料:

代码语言:javascript
复制
directive('watchSelection', function() {
    return function(scope, elem) {
        elem.on('mouseup', function() {
            var start = elem[0].selectionStart;
            var end = elem[0].selectionEnd;
            scope.selected = elem[0].value.substring(start, end);
            scope.$apply();
        });
    }; 
});

HTML:

代码语言:javascript
复制
<input type="text" ng-model="name" placeholder="Enter Name" watch-selection>

http://plnkr.co/edit/4LLfWk110p8ruVjAWRNv

票数 1
EN

Stack Overflow用户

发布于 2013-09-30 17:32:00

下面是如何从input字段获取所选文本:

http://jsfiddle.net/vREW8/

代码语言:javascript
复制
var input = document.getElementsByTagName('input')[0];
var selectedText = input.value.substring(input.selectionStart, input.selectionEnd);

您可以随心所欲地在Anuglar.js中使用它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19099851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档