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

给 Textarea中选定的文字前后加上标签,具体做法如下:(经测试Firefox和IE中全部通过)
<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) == '/n') 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) == '/n') 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) == '/n') end ++; } } } } </script>

< 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 >  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值