• 微博插入话题


    效果的实现

    文字的选中功能是不太常用的功能,多出现在文本编辑器中,或是文本域之类的光标处理上。所以呢,使用的一些属性也并不是常见的。在IE浏览器下使用的是createTextRange而Firefox/chrome等现代浏览器下使用的是setSelectionRange。

    假设文本域对象的名称是obj,则在IE及非IE浏览器下实现指定文字选中的代码如下:

    IE浏览器下:
    var range = obj.createTextRange(); 
    range.moveStart("character", 开始序号); 
    range.moveEnd("character", 结束序号); 
    range.select(); 
    非IE浏览器下:
    obj.setSelectionRange(开始序号, 结束序号); 
    obj.focus(); 

    所以,为了在各个浏览器下都能实现效果,我们需要将上面的两段代码组合一下,结果如下:

    if(obj.createTextRange){//IE浏览器     
    var range = obj.createTextRange();     
    range.moveEnd("character",结束序号);     
    range.moveStart("character", 起始序号);     
    range.select(); }else{//非IE浏览器     
    obj.setSelectionRange(起始序号, 结束序号);     
    obj.focus(); }

    code

    <style type="text/css">
    textarea{font
    -size:1em; 500px; height:100px;}
    </style>
    </head>
    <body>
    <textarea id="target"></textarea>
    <p><button id="btn">插入话题</button></p>
    <script>
    var $ = function(id){return document.getElementById(id);};
    $(
    "btn").onclick = function(){
        
    var con = "请在这里输入自定义话题";
        
    //转载文字
        $("target").value += "#"+con+"#";
        
    var l = $("target").value.length;
        
    //创建选择区域    
        if($("target").createTextRange){//IE浏览器
            var range = $("target").createTextRange();
            range.moveEnd(
    "character",-l)         
            
    //range.moveStart("character",-l)              
            range.moveEnd("character",l-1);
            range.moveStart(
    "character", l-1-con.length);
            range.select();
        }
    else{
            $(
    "target").setSelectionRange(l-1-con.length,l-1);
            $(
    "target").focus();
        }
    };
    </script>

     

    文字内容部分选中的代码封装

    关于文字内容的选中可以用一个方法封装起来,以便重用,由于IE不支持DOM leave3,所以Object.prototype不受用于DOM对象,所以这里的方法还是比较传统的,如下代码:

    var textSelect = function(o, a, b){
        
    //o是当前对象,例如文本域对象
        //a是起始位置,b是终点位置
        var a = parseInt(a, 10), b = parseInt(b, 10);
        
    var l = o.value.length;
        
    if(l){
            
    //如果非数值,则表示从起始位置选择到结束位置
            if(!a){a = 0;}
            
    if(!b){b = l;}
            
    //如果值超过长度,则就是当前对象值的长度
            if(a > l){a = l;}
            
    if(b > l){b = l;}
            
    //如果为负值,则与长度值相加
            if(a < 0){a = l + a;}
            
    if(b < 0){b = l + b;}
            
    if(o.createTextRange){//IE浏览器
                var range = o.createTextRange();
                range.moveStart(
    "character",-l);
                range.moveEnd(
    "character",-l);
                range.moveStart(
    "character", a);
                range.moveEnd(
    "character",b);
                range.select();
            }
    else{
                o.setSelectionRange(a, b);
                o.focus();
            }
        }
    };
  • 相关阅读:
    PHP基本的语法以及和Java的差别
    Linux 性能測试工具
    【Oracle 集群】Linux下Oracle RAC集群搭建之Oracle DataBase安装(八)
    【Oracle 集群】Oracle 11G RAC教程之集群安装(七)
    【Oracle 集群】11G RAC 知识图文详细教程之RAC在LINUX上使用NFS安装前准备(六)
    【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之RAC 特殊问题和实战经验(五)
    【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之缓存融合技术和主要后台进程(四)
    【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之RAC 工作原理和相关组件(三)
    Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之ORACLE集群概念和原理(二)
    【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之集群概念介绍(一)
  • 原文地址:https://www.cnblogs.com/wuye1200/p/2080317.html
Copyright © 2020-2023  润新知