jQuery实现在光标处插入文本

news/2024/7/24 2:42:04 标签: xhtml, javascript
jquery.caretInsert.js :
ContractedBlock.gif ExpandedBlockStart.gif Code
jQuery.extend({   
    
/**  
     * 清除当前选择内容  
     
*/  
    unselectContents: 
function(){   
        
if(window.getSelection)   
            window.getSelection().removeAllRanges();   
        
else if(document.selection)   
            document.selection.empty();   
    }   
});   
jQuery.fn.extend({   
    
/**  
     * 选中内容  
     
*/  
    selectContents: 
function(){   
        $(
this).each(function(i){   
            
var node = this;   
            
var selection, range, doc, win;   
            
if ((doc = node.ownerDocument) &&   
                (win 
= doc.defaultView) &&   
                
typeof win.getSelection != 'undefined' &&   
                
typeof doc.createRange != 'undefined' &&   
                (selection 
= window.getSelection()) &&   
                
typeof selection.removeAllRanges != 'undefined')   
            {   
                range 
= doc.createRange();   
                range.selectNode(node);   
                
if(i == 0){   
                    selection.removeAllRanges();   
                }   
                selection.addRange(range);   
            }   
            
else if (document.body &&   
                     
typeof document.body.createTextRange != 'undefined' &&   
                     (range 
= document.body.createTextRange()))   
            {   
                range.moveToElementText(node);   
                range.select();   
            }   
        });   
    },   
    
/**  
     * 初始化对象以支持光标处插入内容  
     
*/  
    setCaret: 
function(){   
        
if(!$.browser.msie) return;   
        
var initSetCaret = function(){   
            
var textObj = $(this).get(0);   
            textObj.caretPos 
= document.selection.createRange().duplicate();   
        };   
        $(
this)   
        .click(initSetCaret)   
        .select(initSetCaret)   
        .keyup(initSetCaret);   
    },   
    
/**  
     * 在当前对象光标处插入指定的内容  
     
*/  
    insertAtCaret: 
function(textFeildValue){   
       
var textObj = $(this).get(0);   
       
if(document.all && textObj.createTextRange && textObj.caretPos){   
           
var caretPos=textObj.caretPos;   
           caretPos.text 
= caretPos.text.charAt(caretPos.text.length-1== '' ?   
                               textFeildValue
+'' : textFeildValue;   
       }   
       
else if(textObj.setSelectionRange){   
           
var rangeStart=textObj.selectionStart;   
           
var rangeEnd=textObj.selectionEnd;   
           
var tempStr1=textObj.value.substring(0,rangeStart);   
           
var tempStr2=textObj.value.substring(rangeEnd);   
           textObj.value
=tempStr1+textFeildValue+tempStr2;   
           textObj.focus();   
           
var len=textFeildValue.length;   
           textObj.setSelectionRange(rangeStart
+len,rangeStart+len);   
           textObj.blur();   
       }   
       
else {   
           textObj.value
+=textFeildValue;   
       }   
    }   
}); 

demo代码段 :
ContractedBlock.gif ExpandedBlockStart.gif Code
 1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"   
 2    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
 3<html xmlns="http://www.w3.org/1999/xhtml" lang="zh">  
 4<head>  
 5<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />  
 6<script type="text/javascript"    
 7   src="http://code.jquery.com/jquery-latest.pack.js"></script>  
 8<script type="text/javascript"    
 9   src="./jquery.caretInsert.js"></script>  
10</head>  
11<body>  
12<div><span id="item">TestText</span></div>  
13<div><input id="hello" type="text" style="width: 200px;" /></div>  
14<div><input type="button" value="Inert on input" id="insertA" /></div>  
15<div><textarea id="world" style="width: 200px;height:50px;"></textarea>  
16<div><input type="button" value="Inert on Textarea" id="insertT" /></div>  
17ExpandedBlockStart.gifContractedBlock.gif<script language="JavaScript" type="text/javascript">  
18ExpandedSubBlockStart.gifContractedSubBlock.gif(function($){   
19    $('#hello').setCaret();   
20ExpandedSubBlockStart.gifContractedSubBlock.gif    $('#insertA').click(function(){   
21        $('#hello').insertAtCaret($('#item').text());   
22    }
);   
23       
24    $('#world').setCaret();   
25ExpandedSubBlockStart.gifContractedSubBlock.gif    $('#insertT').click(function(){   
26        $('#world').insertAtCaret($('#item').text());   
27    }
);   
28  
29    $('#item').hover(   
30ExpandedSubBlockStart.gifContractedSubBlock.gif    function(){   
31        $(this).selectContents();   
32    }
,   
33ExpandedSubBlockStart.gifContractedSubBlock.gif    function(){   
34        $.unselectContents();   
35    }
);   
36}
)($);   
37  
38
</script>  
39</body></html>  
40

转载于:https://www.cnblogs.com/zxl/archive/2009/08/20/1550766.html


http://www.niftyadmin.cn/n/582379.html

相关文章

Oracle在windows新建表,Windows下手动创建Oracle实例

环境版本:Oracle 11g R2Windows 7旗舰版X32步骤目录:1.确定数据库和实例名称2.确认数据库认证方式3.创建数据库初始化参数文件4.创建实例5.连接并启动实例6.使用create database创建数据库7.创建数据库附加表空间8.运行脚本创建数据字典视图9.创建服务器初始化文件具体实施:1.确…

sqlserver笔记——读取一对多数据的方法

实际需求中经常会遇到&#xff0c;要读出表A中的数据&#xff0c;并且读出和A关联的表B中的多行数据&#xff0c;例如&#xff1a; 表Blog的BlogTypeIDList字段记录了对应的以逗号间隔的BlogTypeID字符串&#xff08;类似“2,6,8”的形式&#xff09;&#xff0c;读取每行blog对…

package.json 中 dependencies 和 devDependencies 的区别

dependencies 说明&#xff1a;运行时所依赖的包。开发和生产环境都能使用。 例如&#xff1a;vue、axios、element-ui、vue-router&#xff1b; 安装&#xff1a;npm install --save [包名] devDependencies 说明&#xff1a;开发时所依赖包。只在开发环境下使用&#x…

oracle补足位数的函数,Oracle中关于处理小数点位数的几个函数

关于处理小数点位数的几个oracle函数()1. 取四舍五入的几位小数select round(1.2345, 3) from dual;结果:1.2352. 保留两位小数&#xff0c;关于处理小数点位数的几个Oracle函数()1. 取四舍五入的几位小数select round(1.2345, 3) from dual;结果:1.2352. 保留两位小数&#xf…

Learning ADO.NET 3.5 Cookbook:(2) Synchronizing Master-Detail Data in a Windows Forms Application

中文介绍&#xff1a;实现主从DataGridView同步显示 效果如图&#xff1a;ProblemYou need to bind both a parent table and child table within a DataSet to a pair of DataGridView controls so that the child data is displayed when a parent is selected.using System;…

php对象动态增加属性,js动态添加、修改、删除对象的属性与方法

如何为一个对象添加、修改或者删除属性和方法。在其他语言中&#xff0c;对象一旦生成&#xff0c;就不可更改了&#xff0c;要为一个对象添加修改成员必须要在对应的类中修改&#xff0c;并重新实例化&#xff0c;而且程序必须经过重新编译。JavaScript 中却非如此&#xff0c…

抽象类

抽象类具有以下特性&#xff1a; 抽象类不能实例化。 抽象类可以包含抽象方法和抽象访问器。 不能用 sealed&#xff08;C# 参考&#xff09;修饰符修改抽象类&#xff0c;这意味着抽象类不能被继承。 从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实实现…

oracle insert replace into,讨人喜欢的 MySQL replace into 用法(insert into 的增强版)

讨人喜欢的 MySQL replace into 用法(insert into 的增强版)在向表中插入数据的时候&#xff0c;经常遇到这样的情况&#xff1a;1. 首先判断数据是否存在&#xff1b; 2. 如果不存在&#xff0c;则插入&#xff1b;3.如果存在&#xff0c;则更新。在 SQL Server 中可以这样处理…