我们可以用window.getselection()得到选择区域,可是有时候我们需要对未选择的区域进行操作,当然与选择区域有关,比如说,选择区域为多行,但是首行未占满,我想得到的区域为选择区域以及选择区域的首行没有选择的部分????急!!!

解决方案 »

  1.   

    这样?<script language=javascript>
    function sel(obj){
        var s=(window.getSelection)?window.getSelection():document.selection.createRange();
        if(obj.createTextRange){
            s.setEndPoint("StartToStart",obj.createTextRange());
        }else{
            (!!s.toString())&&s.getRangeAt(0).setStart(document.body.firstChild, 0); 
        }
        (s.text)&&(alert(s.text),1)||alert(s);
    }
    </script><div>
    我们可以用window.getselection()得到选择区域,可是有时候我们需要对未选择的区域进行操作,当然与选择区域有关,比如说,选择区域为多行,但是首行未占满,我想得到的区域为选择区域以及选择区域的首行没有选择的部分????急!!!
    </div><button onclick='sel(document.body);'>check selection</button>
      

  2.   

    高人可否解释一下:
    (s.text)&&(alert(s.text),1) ¦ &brvbaralert(s); 
      

  3.   


    参见:
    利用运算符优先级实现ifelse表达式
    http://www.v-ec.com/dh20156/article.asp?id=131
      

  4.   

    应该是node,大概是这样的,公司自己做一个js代码编辑平台,有关键词高亮;undo,redo;tab,shift+tab等功能
    这个tab,shift+tab需要我去做。可以在vs里看到选中多行(包括首行,末行占满,未占满),一行,一点之后按下tab,shift+tab的不同效果
    暂时把按下tab的基本需求写了下来,凑合着看看,呵呵
    1 仅按下tab键
       1)目标区域为多行
       情况一  目标区域占满
       情况二  目标区域首行未占满 
       情况三  目标区域末行未占满
       情况四  目标区域首末行均未占满
       操作    a各行之前插入四个空格(此效果和退到下一个制表符效果相同)
               b 目标区域改变  目标区域起始位置前无任何字符  起始绝对位置不变
                               目标区域起始位置前有字符      起始相对位置不变
                               无论目标区域终止位置如何      终止相对位置不变
       2)目标区域为一行  
       情况一 目标区域未占满
       情况二 目标区域占满
       操作  a 删除目标区域
             b 光标跳转到下一个制表符
             c 之后字符顺移
       3)目标区域为一点  
       操作  a光标跳转到下一个制表符
             b之后字符顺移
    现在能实现的是无论选择多少区域,一律在前加四个空格,各行都是在选中区域前加,这很明显是不对的
      

  5.   

    现把相关代码传下 tabAction : function(shiftKey) {
        // get selected range
    var s = window.getSelection();
    var range = s.getRangeAt(0);
    var range2 = range.cloneRange();
    var inner = range.cloneContents();
    var serializer = new XMLSerializer();
            var xml = serializer.serializeToString(inner);
            var os,oe,o;
    //alert(xml);
    inner.insertBefore(document.createTextNode("    "),inner.firstChild);
    o = inner.firstChild;
    while(o) {
        if( "BR" == o.tagName ) {
            if(o.nextSibling) {
                 o.parentNode.insertBefore(document.createTextNode("    "),o.nextSibling);
             }
    //         else {
    //             o.parentNode.appendChild(document.createTextNode("    "));
    //         }
                }
                o =  o.nextSibling;
    }
    os = inner.firstChild;
    oe = inner.lastChild;
    range.deleteContents();
    range.insertNode(inner);
    range2.setStartBefore(os);
    range2.setEndAfter(oe);
    s.removeAllRanges();
    if(oe != os)
         s.addRange(range2);
            else
         range2.collapse(false);
        
        //s.removeAllRanges();
    return;