我们可以用window.getselection()得到选择区域,可是有时候我们需要对未选择的区域进行操作,当然与选择区域有关,比如说,选择区域为多行,但是首行未占满,我想得到的区域为选择区域以及选择区域的首行没有选择的部分????急!!!
解决方案 »
- 初学Extjs,grid无法加载后台传来的json字符串
- jquery 怎么样根据名称获得对应的类型(TYPE)??
- 奇怪的问题!在firefox下,处理xmhttp返回值的回调函数使用document.write函数无效!
- 用js调用的对联广告为什么现在Dreamweaver打不开?
- 动态弹出页面怎么做?
- 帮指点一下,JS的导航栏菜单的链接在那改?
- 对象创建问题!请教高手
- 如何在点击一个链接的时候,弹出一个confirm?如果点击confirm的确定按纽就新打开一个窗口,按取消就不打开?急急!!!
- 帮我看看这段
- setTimeout出现问题
- 怎么样实现先隐藏table,然后点击按钮后,显示按钮,display属性等于什么值时是显示的意思。在线等
- 请问html标记的名称属性值是不是就是窗口的名称呢?
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>
(s.text)&&(alert(s.text),1) ¦ ¦alert(s);
参见:
利用运算符优先级实现ifelse表达式
http://www.v-ec.com/dh20156/article.asp?id=131
这个tab,shift+tab需要我去做。可以在vs里看到选中多行(包括首行,末行占满,未占满),一行,一点之后按下tab,shift+tab的不同效果
暂时把按下tab的基本需求写了下来,凑合着看看,呵呵
1 仅按下tab键
1)目标区域为多行
情况一 目标区域占满
情况二 目标区域首行未占满
情况三 目标区域末行未占满
情况四 目标区域首末行均未占满
操作 a各行之前插入四个空格(此效果和退到下一个制表符效果相同)
b 目标区域改变 目标区域起始位置前无任何字符 起始绝对位置不变
目标区域起始位置前有字符 起始相对位置不变
无论目标区域终止位置如何 终止相对位置不变
2)目标区域为一行
情况一 目标区域未占满
情况二 目标区域占满
操作 a 删除目标区域
b 光标跳转到下一个制表符
c 之后字符顺移
3)目标区域为一点
操作 a光标跳转到下一个制表符
b之后字符顺移
现在能实现的是无论选择多少区域,一律在前加四个空格,各行都是在选中区域前加,这很明显是不对的
// 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;