如何对Textarea中选定的文字前后加上标签

本文介绍了一种在Textarea中为选中文本添加前后标签的方法,并提供了兼容Firefox和IE浏览器的JavaScript实现。通过保存光标位置、插入标签并恢复光标位置等步骤,确保了用户体验的一致性。

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

给 Textarea中选定的文字前后加上标签,具体做法如下:(经测试Firefox和IE中全部通过)

<html>
<head>
<title>TEST</title>
<style>
body,td
{
    font-family
: verdana, arial, helvetica, sans-serif;
    font-size
: 12px;
}

</style>
<script type="text/javascript">
    
var start=0;
    
var end=0;
    
function add(flg1,flg2){       
        
var textarea_str = document.getElementById("ta");
        
var pre = textarea_str.value.substr(0, start);
        
var post = textarea_str.value.substr(end);
        
var center = textarea_str.value.substr(start,end-start);
        textarea_str.value 
= pre + flg1 +center+ flg2+ post;
        
        
// Firefox
        if(typeof(textarea_str.selectionStart) == "number"){
            textarea_str.setSelectionRange(start
+flg1.length,start+flg1.length);
            textarea_str.focus();
        }

        
        
// IE
        if(document.selection){
            
var tempMouseFocusPos = start;
            
for (var i = 0; i <= start; i ++){
                
if (textarea_str.value.charAt(i) == ' ')
                    tempMouseFocusPos
--;
            }

            
if(start == end) {
                textarea_str.select();
                
var rangeIE = document.selection.createRange();
                rangeIE.move(
'character',tempMouseFocusPos+flg1.length);
                rangeIE.select();
            }
 else {
                
var rangeIE = document.selection.createRange();
                rangeIE.move(
'character',tempMouseFocusPos+flg1.length);
                rangeIE.select();
            }

        }

    }

    
function savePos(textarea_str){
        
if(typeof(textarea_str.selectionStart) == "number"){
            start 
= textarea_str.selectionStart;
            end 
= textarea_str.selectionEnd;
        }

        
else if(document.selection){
            
var range = document.selection.createRange();
            
if(range.parentElement().id == textarea_str.id){
                
// create a selection of the whole textarea
                var range_all = document.body.createTextRange();
                range_all.moveToElementText(textarea_str);
                
for (start=0; range_all.compareEndPoints("StartToStart", range) < 0; start++)
                    range_all.moveStart(
'character'1);
                
for (var i = 0; i <= start; i ++){
                    
if (textarea_str.value.charAt(i) == ' ')
                        start
++;
                }

                 
var range_all = document.body.createTextRange();
                 range_all.moveToElementText(textarea_str);
                 
for (end = 0; range_all.compareEndPoints('StartToEnd', range) < 0; end ++)
                     range_all.moveStart(
'character'1);
                     
for (var i = 0; i <= end; i ++){
                         
if (textarea_str.value.charAt(i) == ' ')
                             end 
++;
                     }

                }

            }

           
    }

</script>
</head>
<body>
<form action="a.cgi">
<table border="1" cellspacing="0" cellpadding="0">
    
<tr>
        
<td colspan="2">
            
<textarea id="ta" onKeydown="savePos(this)"
                              onKeyup
="savePos(this)"
                              onmousedown
="savePos(this)"
                              onmouseup
="savePos(this)"
                              onfocus
="savePos(this)"
                              rows
="14" cols="50"></textarea>
        
</td>
    
</tr>
    
<tr>
        
<td><input type="button" onClick="add('[&BOL]','[/&BOL]')" value="Add [&BOL][/&BOL]"/></td>
    
</tr>
</table>
</form>
</body>
</html> 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值