修改、插入textarea值

本文介绍了一种在textarea中实现文本替换与插入的方法。通过JavaScript实现获取选定文本的位置及长度,并提供了替换与插入功能的具体实现细节。适用于需要在前端进行文本编辑功能开发的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**
* 替换textarea中的选中的文字
* @param {Object} replaceStr
* @return {TypeName}
*/
var replaceText = function(replaceStr) {

var textarea = top.document.getElementById('content');
var rangeData = getCursorPosition(textarea);

if (rangeData == null) {
return;
}
var i = rangeData.start;
var all = textarea.value;
var temp1 = all.substring(0, i);
var temp2 = all.substring(i);
var temp3 = replaceStr + temp2.substring(rangeData.text.length);
textarea.value = temp1 + temp3;
}

/**
* 获取textarea中的选中的文字
* @param {Object} textarea
* @return {TypeName}
*/
var getCursorPosition = function(textarea) {
var rangeData = {
text : "",
start : 0,
end : 0
};
textarea.focus();
if (textarea.setSelectionRange) { // W3C
rangeData.start = textarea.selectionStart;
rangeData.end = textarea.selectionEnd;
rangeData.text = (rangeData.start != rangeData.end) ? textarea.value
.substring(rangeData.start, rangeData.end) : "";
} else if (top.document.selection) { // IE
var i, oS = top.document.selection.createRange(),
// Don't: oR = textarea.createTextRange()
oR = top.document.body.createTextRange();
oR.moveToElementText(textarea);

rangeData.text = oS.text;
rangeData.bookmark = oS.getBookmark();

// object.moveStart(sUnit [, iCount])
// Return Value: Integer that returns the number of units moved.
for (i = 0; oR.compareEndPoints('StartToStart', oS) < 0
&& oS.moveStart("character", -1) !== 0; i++) {
// Why? You can alert(textarea.value.length)
if (textarea.value.charAt(i) == '\n') {
i++;
}
}
rangeData.start = i;
rangeData.end = rangeData.text.length + rangeData.start;
}

if (rangeData.text == ""
|| (rangeData.text.length + 2) == textarea.value.length) {
return null;
} else {
return rangeData;
}
}

var ContentCurrentPostion=null; //记录当前位置,如果是IE记录的应该是一个rang范围,firefox则记录的是一个位置值

/**
* 记录插入位置
* @param {Object} obj
*/
var GetTextAreaPostion = function(obj){
if(document.selection){
obj.focus();
ContentCurrentPostion=document.selection.createRange();
}
else if(obj.selectionStart||obj.selectionStart=='0'){
var startPos=obj.selectionStart;
var endPos=obj.selectionEnd;
ContentCurrentPostion=new Object();
ContentCurrentPostion.startPos=startPos;
ContentCurrentPostion.endPos=endPos;
}
else{
ContentCurrentPostion=null;
}
}

/**
* 插入值
* @param {Object} value
* @param {Object} id
*/
var SetContent = function(value)
{
var str=value;
var textarea = top.document.getElementById('content');
GetTextAreaPostion(textarea);
if(ContentCurrentPostion!=null) {
textarea.focus();
if(document.selection) {
ContentCurrentPostion.text=str;
}else{
var startPos=ContentCurrentPostion.startPos;
var endPos=ContentCurrentPostion.endPos;
textarea.value = textarea.value.substring(0,startPos) + str + textarea.value.substring(endPos,textarea.value.length);

}
} else {
textarea.value+=str;
}
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值