`
hongzhguan
  • 浏览: 272751 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

js往选择焦点后添加文字

阅读更多

在一个textarea 中,鼠标焦点在任意文字后面,然后点击一个按钮,就往textarea中输入固定的文字
需要兼容多种浏览器
textarea中有 一段文字 "1234567890"
我把鼠标焦点设置在4后面,点击一个button按钮,在 4字后面自动添加固定文字 "你好",
文本内容变成 "1234你好567890"

 

//获取选中的内容
function getSelectionField(e) {
    var selection = getIeSelection(e);
    if (selection == '') {
        selection = getFireFoxSelection(e);
    }
    return selection;
}

function getIeSelection(e) {
    if (window.getSelection) {
        // This technique is the most likely to be standardized.
        // getSelection() returns a Selection object, which we do not document.
        return window.getSelection().toString();
    }
    else if (document.getSelection) {
        // This is an older, simpler technique that returns a string
        return document.getSelection();
    }
    else if (document.selection) {
        // This is the IE-specific technique.
        // We do not document the IE selection property or TextRange objects.
        return document.selection.createRange().text;
    }
}

function getFireFoxSelection(e) {
    if (e.selectionStart != undefined && e.selectionEnd != undefined) {
        var start = e.selectionStart;
        var end = e.selectionEnd;
        return e.value.substring(start, end);
    } else {
        return "";
    } // Not supported on this browser
}

//在e元素的当前光标位置插入文本
//var cursPos;
function insertText(e, str) {
    var cursPos = TraceCursorPosition(e); // 获取光标位置
    e.value = e.value.slice(0, cursPos.start) + str + e.value.slice(cursPos.end)
}

// 跟踪光标位置
function TraceCursorPosition(obj) {
    var cursPos = $CursorPosition(obj);
    return cursPos;
}

// 返回光标所在位置
/**//*
* source:
* source:
* acknowledges for Marshall
* example:
* var myTextBox = document.getElementById(“MyTextBoxID”);
* var cursPos = $CursorPosition(myTextBox);
* alert(cursPos.item[0] + ” ” + cursPos.item[1]);
* // OR
* alert(cursPos.start + ” ” + cursPos.end);
*/
function $CursorPosition(textBox) {
    var start = 0, end = 0;
    //如果是Firefox(1.5)的话,方法很简单
    if (typeof (textBox.selectionStart) == "number") {
        start = textBox.selectionStart;
        end = textBox.selectionEnd;
    }
    //下面是IE(6.0)的方法,麻烦得很,还要计算上’\n’
    else if (document.selection) {
        var range = document.selection.createRange();
        if (range.parentElement().id == textBox.id) {
            // create a selection of the whole textarea
            var range_all = document.body.createTextRange();
            range_all.moveToElementText(textBox);
            //两个range,一个是已经选择的text(range),一个是整个textarea(range_all)
            //range_all.compareEndPoints()比较两个端点,如果range_all比range更往左(further to the left),则
            //返回小于0的值,则range_all往右移一点,直到两个range的start相同。
            // calculate selection start point by moving beginning of range_all to beginning of range
            for (start = 0; range_all.compareEndPoints("StartToStart", range) < 0; start++)
                range_all.moveStart('character', 1);
            // get number of line breaks from textarea start to selection start and add them to start
            // 计算一下\n
            for (var i = 0; i <= start; i++) {
                if (textBox.value.charAt(i) == '\n')
                    start++;
            }
            // create a selection of the whole textarea
            var range_all = document.body.createTextRange();
            range_all.moveToElementText(textBox);
            // calculate selection end point by moving beginning of range_all to end of range
            for (end = 0; range_all.compareEndPoints('StartToEnd', range) < 0; end++) {
                range_all.moveStart('character', 1);
            }
            // get number of line breaks from textarea start to selection end and add them to end
            for (var i = 0; i <= end; i++) {
                if (textBox.value.charAt(i) == '\n')
                    end++;
            }
        }
    }
    //return [start, end]; // 包括选中区域的起始位置
    // modified to return as Object
    return { 'start': start, 'end': end, 'item': [start, end] };
}

///e=document.getElementById('textboxid'); s=插入的值.
insertText(e, s);

分享到:
评论

相关推荐

    焦点图搭配文字推荐广告代码(JS)

    本篇文章将详细探讨如何利用JavaScript(JS)来实现焦点图与文字推荐广告的结合。 首先,我们需要了解JavaScript的基本概念。JavaScript是一种客户端脚本语言,它允许我们在网页中添加交互性功能,如动态效果、表单...

    Js网页焦点图显示文字说明.rar

    在"Js网页焦点图显示文字说明.rar"这个压缩包中,包含的是一款使用JavaScript和Flash技术实现的网页焦点图特效,特别适合用在门户网站的娱乐频道或者其他需要展示多张图片并附带文字描述的场景。 JavaScript是一种...

    js文字切换特效制作焦点文字带滤镜切换效果

    本文将深入探讨如何使用JavaScript(简称js)来创建一个具有焦点文字切换和滤镜效果的特效。我们将详细解析实现这一特效的关键步骤、涉及到的技术点以及提供的代码资源。 首先,"文字切换"是一种常见的网页动态效果...

    js实现input文本框点击时文字消失,失去焦点时文字出现

    在JavaScript编程中,有时我们需要为输入框(input)设置一种特殊的行为,比如当用户点击输入框时,预设的文字消失,而当用户离开输入框(失去焦点)时,这些文字又重新出现。这种功能常见于搜索框或者密码输入等...

    JS获取文本框焦点光标位置、选中起始位置、终止位置、选择内容

    在JavaScript编程中,文本框(TextBox)是网页交互中常用的一种元素,用户可以在其中输入文本。有时,开发者需要获取或操作文本框中的焦点光标位置、选中起始位置、终止位置以及选中的内容,这对于实现诸如高亮显示...

    jQuery实现文本框获得焦点文字消失

    在这个特定的场景中,我们关注的是如何使用jQuery来实现一个功能:当文本框(input[type="text"])获取焦点时,其预设的文字自动消失,而当失去焦点时,文字又能重新出现。这个功能常见于搜索框或表单输入,以引导...

    js实现input文本框点击时文字消失,失去焦点

    通过上述代码和解析,我们可以清晰地了解到如何使用JavaScript实现`input`文本框点击时文字消失,失去焦点时文字重新出现的功能。这种技术不仅增强了网站的交互性和可用性,也为用户提供了更加直观的操作指南。...

    原生js焦点图片和文字标题淡出淡进轮播切换代码

    此外,为了保证兼容性和性能,还可以使用CSS3的`animation`属性替代JavaScript实现动画效果,但这已经超出了“原生js焦点图片和文字标题淡出淡进轮播切换代码”的范畴。 总之,原生JavaScript实现的焦点图片和文字...

    JS 商城焦点图

    【JS商城焦点图】是一种常见的网页交互元素,用于展示商品或服务的重点信息,通常包括一组图片轮播,每个图片下方可能附带文字说明。在电商网站中,焦点图是吸引用户注意力的重要手段,通过动态效果增强用户体验。这...

    门户频道今日焦点,带有文字介绍的JS代码

    在压缩包中的"门户频道今日焦点,带有文字介绍的JS代码"文件中,我们可以找到实现以上功能的具体代码。通过查看和学习这个代码,开发者可以理解如何构建一个完整的图片轮播组件,并根据自己的需求进行定制。此外,这...

    原生js酷狗首页焦点图片文字标题切换效果代码

    在本项目中,我们主要探讨的是如何利用原生JavaScript实现酷狗音乐首页那样的焦点图片与文字标题切换效果。这种效果通常用于网站的首页,能够吸引用户的注意力并展示重要的信息或内容。下面我们将深入讨论实现这一...

    jquery左右切换(支持文字)焦点图

    【jQuery左右切换(支持文字)焦点图】 在网页设计中,焦点图是一种常见的展示内容的方式,它可以有效地吸引用户的注意力并展示多个重要的信息或图片。jQuery作为一款强大的JavaScript库,为实现这种功能提供了便利。...

    左右切换带文字说明的焦点图特效

    对于文字说明的显示,可以结合CSS类的添加和移除,控制文字的可见性。 4. 数据结构和逻辑:如果焦点图包含多组图片和文字,可能需要使用数组或者其他数据结构存储这些信息。在JavaScript中,根据数组中的数据来动态...

    懒人原生纯js(不依赖现有框架)焦点文字滚动效果

    当我们谈论“懒人原生纯js(不依赖现有框架)焦点文字滚动效果”时,这意味着我们将探讨如何利用JavaScript的基本功能实现一个动态的文字滚动效果,而无需借助如jQuery、Vue或React等成熟的JavaScript框架。...

    原生JS左右滚动焦点图.zip

    总的来说,原生JS左右滚动焦点图是一个结合了DOM操作、事件处理、动画制作等多个JavaScript核心概念的实践案例,对于提升JavaScript编程能力非常有帮助。通过学习和理解这一技术,开发者能够更熟练地驾驭网页动态...

    右侧文字tab标签样式jquery焦点图

    【标题】:“右侧文字tab标签样式jquery焦点图”是一个网页设计中的交互效果,它结合了jQuery库和CSS样式,实现了文字导航与图片焦点切换的融合。这种效果常常用于网站的首页展示,以吸引用户注意力并提供多张图片的...

    迅雷音乐频道今日焦点JS代码

    "焦点 js"标签进一步确认了我们的讨论重点,即如何使用JavaScript来创建和控制网页上的焦点效果。这种效果可能是通过改变图片、文字或其他元素的显示来实现的,以吸引用户的注意力并提供交互性。 在压缩包中的"迅雷...

    时尚网7图焦点图轮番带文字说明JavaScript版

    【时尚网7图焦点图轮番带文字说明JavaScript版】是一种常见的网页动态效果,用于展示一组图片,并在图片切换时附带相应的文字说明。这种效果能够吸引用户注意力,提升用户体验,常见于时尚、新闻或者产品展示类网站...

    js焦点图轮换源码 常用的js焦点图代码

    JavaScript焦点图轮换是一种常见的网页动态效果,用于展示一组图片或内容,并自动循环播放,以吸引用户的注意力。这种技术在网站头部、产品展示区域或新闻滚动等地方非常常见。下面我们将详细探讨JavaScript焦点图...

    js带标题的焦点图代码_带按钮的焦点图代码

    JavaScript焦点图,通常被称为轮播图或幻灯片展示,是一种常见的网页元素,用于在有限的空间内展示多张图片或内容。它通过自动切换或用户交互来改变显示的内容,常用于产品展示、新闻滚动或者网站背景等场景。在这个...

Global site tag (gtag.js) - Google Analytics