JS操作剪切板

FF--IE (兼容)  数据直接添加到剪切板

function CopyContent(copy)  {   
    if (window.clipboardData) {   
      window.clipboardData.setData("Text", copy);   
    }   
    else if (window.netscape) {   
      netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');   
      var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);   
      if (!clip) return;   
         var trans = Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);   
         if (!trans) return;   
         trans.addDataFlavor('text/unicode');   
         var str = new Object();   
         var len = new Object();   
         var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);   
         var copytext=copy;   
         str.data=copytext;   
         trans.setTransferData("text/unicode",str,copytext.length*2);   
         var clipid=Components.interfaces.nsIClipboard;   
         if (!clip) return false;   
         clip.setData(trans,null,clipid.kGlobalClipboard);   
     }   
     alert("复制成功!!");   
     return false;      
}  


 

 

<html> 
 <head> 
 <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> 
 <meta name="GENERATOR" content="Microsoft FrontPage 4.0"> 
 <meta name="ProgId" content="FrontPage.Editor.Document"> 
 <title>光标位置-www.0097.org</title> 
 <style> 
  INPUT{border: 1 solid #000000} 
  BODY,TABLE{font-size: 10pt} 
 </style> 
 </head> 
 <body> 
 <table border="0" width="700" cellspacing="0" cellpadding="0"> 
 <tr> 
 <td width="479" rowspan="7"> 
 点击 TextArea 实现光标定位 
 <p> 
 <textarea rows="7" cols="49" id="box" οnclick=tellPoint()>我怕来不及我要抱着你,直到感觉你的绉纹有了岁月的痕迹,直到视线变得模糊直到不能呼吸 
 为了你我愿意 
 动也不能动也要看着你,直到感觉你的发线有了白雪的痕迹,直到肯定你是真的直到失去力气让我们形影不离 
 如果全世界我也可以放弃,至少还有你值得我去珍惜而你在这里就是生命的奇迹 
 也许全世界我也可以忘记,就是不愿意失去你的消息你掌心的痣我总记得在哪里 
 我们好不容易我们身不由已,我怕时间太快不够将你看仔细,我怕时间太慢日夜担心失去你恨不得一夜之间白头永不分离 
 </textarea> 
 
 <script> 
 function movePoint() { 
 	var pn = parseInt(pnum.value); 
 	if(isNaN(pn)) return; 
 	var rng = box.createTextRange(); 
   	/ /rng.findText("你");	//下面有解释
 	rng.moveStart("character",pn); 
 	rng.collapse(true);		//ture为光标指示到起点,false光标指示到终点
 	rng.select();			//同样可以用rng.move("character",pn)来实现无需上一步
 	returnCase(rng) 
 } 
 
 function tellPoint() { 
 	var rng = event.srcElement.createTextRange(); 
 	rng.moveToPoint(event.x,event.y); 
 	rng.moveStart("character",-event.srcElement.value.length) 
 	pnum.value = rng.text.length 
 	returnCase(rng) 
 } 
 
 function returnCase(rng) { 
 	bh.innerText = rng.boundingHeight; 
 	bl.innerText = rng.boundingLeft; 
 	bt.innerText = rng.boundingTop; 
 	bw.innerText = rng.boundingWidth; 
 	ot.innerText = rng.offsetTop; 
 	ol.innerText = rng.offsetLeft; 
 	t.innerText = rng.text; 
 } 
 
 function selectText(sp,ep) { 
 	sp = parseInt(sp) 
 	ep = parseInt(ep) 
 	if(isNaN(sp)||isNaN(ep))  return; 
 	var rng = box.createTextRange(); 
 	rng.moveEnd("character",-box.value.length)   //这里要注意-length是让光标的起始点和终止点都回到起始处
 	rng.moveStart("character",-box.value.length) 
 	rng.collapse(true); 
 	rng.moveEnd("character",ep)                            //注意的是先后顺序
 	rng.moveStart("character",sp) 
 	rng.select(); 
 	returnCase(rng); 
 } 
 
 var rg = box.createTextRange(); 
 
 function findText(tw) { 
 	if(tw=="") return; 
 	var sw = 0; 
 	if(document.selection) { 
 		sw = document.selection.createRange().text.length; 
 	} 
 	rg.moveEnd("character",box.value.length);  
 	rg.moveStart("character",sw); 
 	if(rg.findText(tw)) { 
 		rg.select(); 
 		returnCase(rg); 
 	} 
 	if(rg.text!=tw) { 
 		alert("已经搜索完了") 
 		rg = box.createTextRange() 
 	} 
 } 
 </script> 
 </p> 
 <p></p> 
 光标位置:<input type="text" value="0" id="pnum" size="8"> <input type="button" οnclick="movePoint()" value="移动光标到指定位置"> 
 <p></p> 
 选择指定范围:<input type="text" size="9" id="sbox"> -- <input type="text" size="9" id="ebox"> <input type="button" οnclick="selectText(sbox.value,ebox.value)" value="选择"> 
 <p></p> 
 选择查找字符 :<input type="text" value="" id="cbox" size="8"> <input type="button" οnclick="findText(cbox.value)" value="查找下一个并选择"> 
 </td> 
 <td width="217">boundingHeight: <span id="bh"></span></td> 
 </tr> 
 <tr> 
 <td width="217">boundingWidth: <span id="bw"></span></td> 
 </tr> 
 <tr> 
 <td width="217">boundingTop: <span id="bt"></span></td> 
 </tr> 
 <tr> 
 <td width="217">boundingLeft: <span id="bl"></span></td> 
 </tr> 
 <tr> 
 <td width="217">offsetLeft: <span id="ol"></span> </td> 
 </tr> 
 <tr> 
 <td width="217">offsetTop: <span id="ot"></span> </td> 
 </tr> 
 <tr> 
 <td width="217">text: <span style="position: absolute; z-index: 10" id="t"></span> </td> 
 </tr> 
 </table> 
 </body> 
 
 </html> 


 

经过多次调试才弄明白,当光标move,它的开始和结束点是重合的,
所以如果move的话那它的头和尾的光标在一起,如果要选择区域的话就要两者都设,比如
rng.move("character",2);
rng.moveEnd("character",2);
rng.select()
显示高亮,
如果我们没有将光标移动也就是var rng = box.createTextRange())状态,
那它的光标起始在头部,结束在尾部(可以负移动moveEnd),所以你moveStart就可以选择到文本最后的高亮,
而如果我们已经将光标有所移动比如:rng.findText("");这样光标的起始和终点其实也是已经重合在了一起,
这个时候你moveStart不动的话那就必须要通过移动moveEnd来显示高亮,

 

<!-- 欢迎转载,请保留作者和出处,谢谢 -->---------------我注明是摘自LxcJie的专栏:)
<HTML>
<STYLE>
.notChangePartValue...{
    input:expression(regInput(this));
}
</STYLE>
<SCRIPT language="javascript">
function regInput(obj)...{

obj.ondrop = function()...{return false;}

obj.oncontextmenu = function()...{return false;}

obj.onkeydown = function() ...{
        restrictInputValue(obj)
    }
}

function restrictInputValue(obj)...{
    var range = obj.createTextRange();

    if(typeof(obj.initWidth) == "undefined")...{
        obj.initWidth = range.boundingWidth;
    }
    var selRange = document.selection.createRange();

    if(selRange.text.length == 0)...{
        selRange.setEndPoint("StartToStart",range);
        var currentWidth = selRange.boundingWidth;
        if(currentWidth < obj.initWidth)...{
            if(event.keyCode < 33 || event.keyCode > 40
                || event.keyCode == 46 || event.keyCode == 8)
                event.returnValue = false;
        }
        if(currentWidth == obj.initWidth)...{
            if(event.keyCode == 8)
                event.returnValue = false;
        }
    }
    else...{
        selRange.moveEnd("character",-selRange.text.length);            //据我测试利用selRange.collapse(true)即可
        selRange.setEndPoint("StartToStart",range);
        var currentWidth = selRange.boundingWidth;
        if(currentWidth <= obj.initWidth-1)...{
            if(event.keyCode < 33 || event.keyCode > 40)
               event.returnValue = false;
        }
    }
}
</SCRIPT>
<BODY>
<INPUT type="text" value="Soft" class="notChangePartValue">
</BODY>
</HTML>

 

 

今天仔细研究了一下setEndPoint的用法:给它的定义是t根据其它范围的结束点设置某范围的结束点

<SCRIPT language="javascript">
function aaa(){
 var rng = document.getElementById("aa").createTextRange(); 
 var rng1 = document.getElementById("aa").createTextRange(); 
 var selRange = document.selection.createRange();
 selRange.setEndPoint("StartToStart",rng);
 selRange.setEndPoint("EndToEnd",rng);
 alert(selRange.text.length)
 selRange.select()
 }
 </SCRIPT>
 <html>
 <BODY>
 <INPUT type="text" value="Softasdfasdfasfdaf" id="aa"  οnclick="aaa()">
 <form name="form1" method="post" action="">
   <input type="button" name="Button" value="Button" onClick="aaa()">
 </form>
 </BODY>
 </HTML>


 

上面是文本框的例子, selRange.setEndPoint("StartToStart",rng);的意思就是我们光标点开始往后的文本,selRange.setEndPoint("EndToEnd",rng);是光标点往前的文本,我们可以通过rng.move("character",4)来设置光标点,测试这个例子就明白了,

<SCRIPT language="javascript">
function aaa(){
 var rng = document.getElementById("aa").createTextRange(); 
 var rng1 = document.getElementById("aa").createTextRange(); 
 var selRange = document.selection.createRange();
 rng.move("character",4)
 //rng1.setEndPoint("StartToStart",rng);
 selRange.setEndPoint("EndToEnd",rng);
 alert(rng1.text)
 }
 </SCRIPT>
 <html>
 <BODY>
 <INPUT type="text" value="Softasdfasdfasfdaf" id="aa"  οnclick="aaa()">
 <form name="form1" method="post" action="">
   <input type="button" name="Button" value="Button" onClick="aaa()">
 </form>
 </BODY>
 </HTML>


 

javascript中createTextRange用法
返回createTextRange的text和htmlText
<script language="javascript">
function test(){
var rng=document.body.createTextRange();
alert(rng.text)
}
function test1(){
var rng=document.body.createTextRange();
alert(rng.htmlText)
}
</script>
<input type="button" οnclick="test()" value="text">
<input type="button" οnclick="test1()" value="htmlText">
获取指定文本框中的选中的文字:只响应第一个文本框
<input id="inp1" type="text" value="1234567890">
<input id="inp2" type="text" value="9876543210">
<input type="button" οnclick="test()" value="确定">
<script language="javascript">
function test(){
var o=document.getElementById("inp1")
var r = document.selection.createRange();
if(o.createTextRange().inRange(r))
alert(r.text);
}
</script>
页面文本倒序查找
abababababababa
<input value="倒序查找a" οnclick=myfindtext("a") type="button">
<script language ='javascript'>
var rng = document.body.createTextRange();
function myfindtext(text){
rng.collapse(false);
if(rng.findText(text,-1,1)){
rng.select();
rng.collapse(true);
}else{alert("end");}
}
</script>
聚焦控件后把光标放到最后
<script language="javascript"> 
function setFocus() { 
var obj = event.srcElement; 
var txt =obj.createTextRange(); 
txt.moveStart('character',obj.value.length); 
txt.collapse(true); 
txt.select(); 
} 
</script> 
<input type="text" value="http://toto369.net" οnfοcus="setFocus()">
得到文本框内光标位置
<script language="javascript">
function getPos(obj){
obj.focus();
var s=document.selection.createRange();
s.setEndPoint("StartToStart",obj.createTextRange())
alert(s.text.length);
}
</script>
<input type="text" id="txt1" value="1234567890">
<input type="button" value="得到光标位置" οnclick=getPos(txt1)>
控制input框内光标位置
<script language="javascript">
function setPos(num){
text1.focus();
var e =document.getElementById("text1");
var r =e.createTextRange();
r.moveStart('character',num);
r.collapse(true);
r.select();
}
</script>
<input type="text" id="text1" value="1234567890">
<select οnchange="setPos(this.selectedIndex)">
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
</select>
选中文本框中的一段文字
<script language=javascript>
function sel(obj,num){
var rng=obj.createTextRange()
var sel = rng.duplicate();
sel.moveStart("character", num);
sel.setEndPoint("EndToStart", rng);
sel.select();
}
</script>
<input type="text" id="text1" value="1234567890">
<select οnchange="sel(text1,this.value)">
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
</select>
控制文本框内光标的移动
<input type="button" value="<" οnclick=go(-1)> 
<input id="demo" value="这里是文字">
<input type="button" value=">" οnclick=go(1)> 
<script language="javascript">
function go(n){
demo.focus();
with(document.selection.createRange()){
moveStart("character",n);
collapse();
select();
}
}
</script>


原始出处找不到了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值