js 高亮显示文本框中部分内容

2 篇文章 0 订阅
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>

<body>
<form id="form">
        <fieldset>
                <legend>测试</legend>
                <textarea name="text" rows="10" cols="30">www.51cto.com 技术成就梦想,sdfjkhsdkjfhewkjhrdsfgdfg

                </textarea>
                <br />
                <input name="getText" type="button" value="获取选中文本" />
                <input name="getSel" type="button" value="获取光波位置" />
                <br /><input name="setText" type="button" value="设置选中文本" />
                <input name="setSel" type="button" value="设置光标位置" />
        </fieldset>
</form>

<script type="text/javascript">

Selection = function(input){
        this.isTA = (this.input = input).nodeName.toLowerCase() == "textarea";
};
with({o: Selection.prototype}){
        o.setCaret = function(start, end){
                var o = this.input;
                if(Selection.isStandard)
                        o.setSelectionRange(start, end);
                else if(Selection.isSupported){
                        var t = this.input.createTextRange();
                        end -= start + o.value.slice(start + 1, end).split("\n").length - 1;
                        start -= o.value.slice(0, start).split("\n").length - 1;
                        t.move("character", start), t.moveEnd("character", end), t.select();
                }
        };
        o.getCaret = function(){
                var o = this.input, d = document;
                if(Selection.isStandard)
                        return {start: o.selectionStart, end: o.selectionEnd};
                else if(Selection.isSupported){
                        var s = (this.input.focus(), d.selection.createRange()), r, start, end, value;
                        if(s.parentElement() != o)
                                return {start: 0, end: 0};
                        if(this.isTA ? (r = s.duplicate()).moveToElementText(o) : r = o.createTextRange(), !this.isTA)
                                return r.setEndPoint("EndToStart", s), {start: r.text.length, end: r.text.length + s.text.length};
                        for(var $ = "[###]"; (value = o.value).indexOf($) + 1; $ += $);
                        r.setEndPoint("StartToEnd", s), r.text = $ + r.text, end = o.value.indexOf($);
                        s.text = $, start = o.value.indexOf($);
                        if(d.execCommand && d.queryCommandSupported("Undo"))
                                for(r = 3; --r; d.execCommand("Undo"));
                        return o.value = value, this.setCaret(start, end), {start: start, end: end};
                }
                return {start: 0, end: 0};
        };
        o.getText = function(){
                var o = this.getCaret();
                return this.input.value.slice(o.start, o.end);
        };
        o.setText = function(text){
                var o = this.getCaret(), i = this.input, s = i.value;
                i.value = s.slice(0, o.start) + text + s.slice(o.end);
                this.setCaret(o.start += text.length, o.start);
        };
        new function(){
                var d = document, o = d.createElement("input"), s = Selection;
                s.isStandard = "selectionStart" in o;
                s.isSupported = s.isStandard || (o = d.selection) && !!o.createRange();
        };
}

var f = document.forms.form;
var selection = new Selection(f.text);

f.getText.onclick = function(){
        alert(selection.getText());
        f.text.focus();
};
f.setText.onclick = function(){
        var s = prompt("New text:", selection.getText());
        s !== null && selection.setText(s);
        f.text.focus();
};
f.getSel.onclick = function(){
        var s = selection.getCaret();
        alert("Start: " + s.start + "\nEnd: " + s.end);
        f.text.focus();
};
f.setSel.onclick = function(){
        var s = selection.getCaret();
        selection.setCaret(+prompt("开始:", s.start) || 0, +prompt("结束:", s.end) || 0);
        f.text.focus();
};
</script>
</body>
</html>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue的markdown文本框可以使用mavon-editor组件进行实现。在Vue文件引入mavon-editor组件,并在template使用<mavon-editor>标签即可创建一个markdown文本框。可以通过使用v-model指令绑定一个数据属性,来实现文本框内容与数据属性之间的双向绑定。同时,可以通过监听事件来获取markdown内容的变化和保存操作的触发。例如,在methods定义一个updateDoc方法来监听@change事件,该方法会在markdown内容发生改变时被触发,并自动将markdown和html内容传递到这个方法。类似地,可以定义一个saveDoc方法来监听@save事件,该方法会在按下ctrl+s保存操作时被触发,并同样将markdown和html内容传递到这个方法。引用的代码示例展示了一个使用mavon-editor组件的Vue文件的实现方式。除此之外,还可以使用marked.js和highlight.js来解析Markdown文本和代码块,提高用户的阅读体验。在引用的代码示例,展示了如何引入marked.js和highlight.js,并设置marked的highlight选项,以便对代码进行语法高亮。此外,如果需要在项目的全局范围内使用mavon-editor组件,可以在main.js文件进行全局引用。引用的代码示例展示了如何在main.js文件引入mavon-editor组件和其对应的样式文件。这样,在整个项目都可以使用<mavon-editor>标签创建markdown文本框了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [vue使用vue-markdown编辑框,实现简单保存文本和html内容](https://blog.csdn.net/ljq18115/article/details/102091112)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [Vue实现Markdown](https://blog.csdn.net/weixin_65950231/article/details/130557893)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值