• 文本框脚本


    HTML中,用两种方式来表示文本框: input 单行文本、textarea 多行文本

    那么在文本中存在哪些事件尼?

      1    select  都支持 但是其触发的时机不一样

    IE9+ 、Safair 、Opera、Chorme、Firefox 当用户选择文件时,鼠标松开时触发
    IE8以及其下 当用户选择文本时,就会触发

      

     1  window.onload = function() {
     2         if (document.addEventListener) {
     3             document.forms[0].elements[0].addEventListener("select", function () {
     4                 console.log("select" + this.value);
     5             }, false)
     6         } else {
     7             document.forms[0].elements[0].attachEvent("onselect", function (event) {
     8                 console.log("ie select" + event.srcElement.value);
     9             });
    10         }
    11     }

      2 取得选择的文本

        H5  添加的两个属性, 

          selectionStart、selectionEnd 

        IE9+ 、Safair 、Opera、Chorme、Firefox 支持这两个属性

        IE8不支持这两个属性,但是提供 document.selection 对象, 其中保存着用户在整个文档范围内选择的文本信息;也就是说,无法确定用户选择的是页面中那个部位的文本。不过,在于select事件一起使用时候,可以假设是用虎选择了文本框中的文本,因此触发该事件。要取得选择的文本,首先必须创建一个范围,然后再将文本从其中取出来,如下。

        

       function getSelectedText(textbox){
            if(typeof textbox.selectionStart == "number"){
                return  textbox.value.substr(textbox.selectionStart,textbox.selectionEnd);
            }else if(document.selection){
                return document.selection.createRange().text;
            }
        }

      3 选择部分内容

        setSelectionRange(start,end)  接收两个参数,并且不包括 end指定的内容

      IE9+ 、Safair 、Opera、Chorme、Firefox

        

        document.forms[0].elements[0].setSelectionRange(0,3); //123
    
      document.forms[0].elements[0].setSelectionRange(0,2);//12
        document.forms[0].elements[0].setSelectionRange(0,1);//1

      IE8以及其低版本中不支持 setSelctionRange方法,但是要想选择部分内容步骤如下:

        1   createTextRange 创建一个范围,并将其放在恰当的位置

        2   再通过 moveStart() 和 moveEnd()这两个范围方法将范围移动到位。

        3   调用moveStart、moveEnd之前必须使用 collapse()将范围折叠到文本框的开始位置。(此时在moveStart()将范围的起始点和终点移到了相同的位置 )

        4  接着再给moveEnd()传入要选择的字符总数即可。 最后一步就是使用范围的select()选择文本

    movStart()  

    @param {string} unit character、 word 、 sentence、textedit 

    @param {Number} [count]
    @return {void}

    moveEnd()
        var textbox = document.forms[0].elements[0]; //who are you miss w
      
    var range = textbox.createTextRange(); range.collapse(true); range.moveStart("word",0); // character 字符 || word 单词 || sentence 段落 range.moveEnd("word",3);  // who are you range.select();

      当为 textedit 插入点(选择开始位置从结尾开始)移动到整个文本范围的结束处

    var textbox = document.forms[0].elements[0]; //who are you miss w
    var range = textbox.createTextRange();
    range.collapse(
    true);
    range.moveStart(
    "textedit"); // character 字符 || word 单词 || sentence 段落

    range.moveStart("character",-10); // miss wang
    range.select();

      综合上面的方式可以给出跨浏览器的方式:

       function selectText(textbox,start,end){
            if(textbox.setSelectionRange){
                textbox.setSelectionRange(start,end)
            }else{
                var range = textbox.createTextRange();
                range.collapse(true);
                range.moveStart("character",start); // character 字符  || word 单词 || sentence 段落
                range.moveStart("character",end-start)
                range.select();
            }
        }

    @param {Node}  
    @param {Number} 

    @param {Number} [count]
    @return {void}

      下面通过一个实例来验证一下:

      不管哪种情况下,必须是获得焦点之后执行 

        function selectText(textbox,start,end){
            if(textbox.setSelectionRange){
                textbox.setSelectionRange(start,end)
            }else{
                var range = textbox.createTextRange();
                range.collapse(true);
                range.moveStart("character",start); // character 字符  || word 单词 || sentence 段落
                range.moveStart("character",end - start)
                range.select();
            }
        }
    
        selectText(textbox,0,10); //who are yo

      

  • 相关阅读:
    swift 学习资源 大集合
    ACM:回溯,八皇后问题,素数环
    hibernate 批量处理数据
    CTR校准
    Android Handler Message总结一下
    使用腾讯电子邮件,邮箱的一部分是无法接收正常邮件的问题
    JS获得URL参数
    JSP 获取访问者真正的IP地址
    根据百度API获得经纬度,然后根据经纬度在获得城市信息
    oracle initialization or shutdown in progress解决方法
  • 原文地址:https://www.cnblogs.com/czhyuwj/p/5721616.html
Copyright © 2020-2023  润新知