【问题标题】:Highlight Text in Text Field at a Specific Point在特定点突出显示文本字段中的文本
【发布时间】:2013-05-28 20:11:40
【问题描述】:

我正在尝试复制 Twitter 的“撰写新推文”框。我有一个计数器,显示你还剩下多少个字母。我没有使用 HTML 的 maxlength,所以当你进入底片时,计数器变成红色并且是负数。在 Twitter 中,溢出的文本会以浅红色突出显示。

如何在文本字段中突出显示溢出的文本?这是我已经拥有的 HTML 和 JavaScript 。 (我之前试图突出显示文本,但我不知道从哪里开始,因为我是菜鸟。:P):

        <div id="char_count">
            <span id="charsLeftH" title="Characters Remaining" style="cursor: pointer">500</span>
        </div>
        <input type="button" value="Send" id="submit">
        <script>
            var chars = 500;

            function charsLeft() {
                chars = 500 - $("#type_area").val().length;
                document.getElementById("charsLeftH").innerHTML=chars;
                if (chars < 50 && chars > 0) {
                    document.getElementById("charsLeftH").style.color="#9A9A00";
                    document.getElementById("submitX").id="submit";
                } else if (chars < 1) {
                    document.getElementById("charsLeftH").style.color="#BD2031";
                    if (chars < 0) {document.getElementById("submit").id="submitX";}
                } else {
                    document.getElementById("charsLeftH").style.color="#000000";
                    document.getElementById("submitX").id="submit";
                }
            };

            charsLeft();
        </script>

【问题讨论】:

标签: javascript html text highlight maxlength


【解决方案1】:

这是脚本 jfiddle:

style:
    <style type="text/css">
    .red{
        color:#F00;
        }
    #mytextarea{
        background-color:#999;
        filter:alpha(opacity=50);
        opacity:0.5; 
        border: 1px #3399FF solid;
        min-height:50px;
        width:150px;
        word-wrap:break-word;
        }
    </style>

html:

<div contenteditable="true" id="mytextarea" onChange="charsLeft(this.innerHTML)" onKeyUp="charsLeft(this.innerHTML)"></div> <div id="remaining"></div>

javascript:

<script>
    var before = 1;
var chars = 10;
var len = 0;
var div = document.getElementById('mytextarea');
var el = document.getElementById('remaining');
el.innerHTML = chars;
var overchars = 92; //length of the tags
function charsLeft(val) {
    if (typeof (val) != 'undefined') {
        val = val.replace('<font style="background-color:#F36;" id="reddragonred">', '');
        val = val.replace('</font>', "");
        len = val.length;
        if (len > chars) {
            plusvalor = val.slice(chars, len);
            redstr = '<font style="background-color:#F36;" id="reddragonred">' + plusvalor + '</font>';
            blackstr = val.slice(0, chars);
            div.innerHTML = blackstr + redstr;
            var subj = document.getElementById('reddragonred');
            var cursorepos = subj.innerHTML.length;
            var range = document.createRange();
            var sel = window.getSelection();
            console.log(before+' '+len);
            if((before>0)&&(before<len)){
                console.log('no');
                try{
                    console.log(cursorepos);
                    if(cursorepos==0){
                        range.setStart(subj, 0);
                    }else{
                        range.setStart(subj, 1);
                    }
                }catch (e){
                    console.log(e);
                }
                range.collapse(true);
                sel.removeAllRanges();
                sel.addRange(range);
                div.focus();
            }
            before=len;
        }
    }
    el.innerHTML = chars - len;
}

</script>

【讨论】:

  • 谢谢!我会在可以的时候检查一下。此外,在 jfiddle 中,当我输入并变成红色时,我的输入被移到了突出显示的开头。不过我会看看我能做些什么;)
  • @Buonicrm 在 contenteditable 元素中很难找到一个好的代码来使用光标。这是分配: range.setStart(div, 1);从 0,1 和 2 我发现 1 是最差的。我昨天浪费了很多时间,如果有解决方案我会写。
  • @Bionicrm 我更新了一些东西,只适用于第一个字符。考虑到数据的获取方式,我无法弄清楚它如何抛出该异常:jsfiddle.net/XCdCy/6
  • @Bionicrm 现在它把光标放在最后,代码在答案和这里更新:jsfiddle.net/XCdCy/8
猜你喜欢
  • 2011-06-26
  • 1970-01-01
  • 2013-01-23
  • 2015-07-19
  • 1970-01-01
  • 1970-01-01
  • 2020-04-17
  • 1970-01-01
  • 2020-12-17
相关资源
最近更新 更多