求助:非IE浏览器JS获得选中文字在段落中的位置 如题:比如有一个DIV当中选中文字即显示选啊文字所在的位置。是多个段落里选中。并不是单一段落里。如<p>123456</p><p>abcbf</p>选取b后,显示:选中的文字:b,所在位置(8,8)。这里主要是请教非IE浏览器的选取问题,谢谢大家。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不知有没有灵活点方法<!DOCTYPE html><html lang="en"> <body> <p>123456</p><p>abcbf</p> </body> <script>var sel=window.getSelection(); var rng=document.createRange(); var ps=document.getElementsByTagName('p') sel.removeAllRanges(); rng.setStart(ps[0].childNodes[0],2); rng.setEnd(ps[1].childNodes[0],2);sel.addRange(rng);</script> </html> function insertText(divId) { var obj = document.getElementById(divId); var tmpStr = obj.InnerHtml; VAR b, startPos, endPos; if (document.selection) { // FOR IE var sel = document.selection.createRange(); var pre = sel.boundingWidth/sel.text.length; startPos = sel.boundingLeft/pre; endPos = startPos+sel.text.length; b = sel.text; } else if (typeof obj.selectionStart == 'number' && typeof obj.selectionEnd == 'number') { // FOR others startPos = obj.selectionStart; endPos = obj.selectionEnd; b = tmpStr.substring(startPos, tmpStr.length-endPos); } else { startPos = endPos = 0; b = tmpStr; } // Result 选中的文字:b,所在位置(startPos,endPos); startPos 与 endPos是指选中字符位置} 在极速360浏览器当中使用,获取不到对象,还有IE当中的已经解决,请帮助集中解决非IE的浏览器即可。谢谢您的回复。 if (typeof obj.selectionStart == 'number' && typeof obj.selectionEnd == 'number') { // FOR others startPos = obj.selectionStart; endPos = obj.selectionEnd; b = tmpStr.substring(startPos, tmpStr.length-endPos);}这段即是针对非IE浏览器的,我木有装360,但是FF,Chrome, Safari, Opera都已支持 var obj = document.getElementById(divId);//这句就不是所有主流浏览器所支持的吧。var tmpStr = obj.InnerHtml;另外在IE当中是显示的位置是小数点了的。我这里是的html形式的.不是文本框的。在Chrome,Opera都不行。我这边测试引用时是:insertText('divID')。还请指教。 试试 replace();用正则表达式 加上参数g来选择 主要是非IE浏览器的获取对象问题。var my_selection=window.getSelection();alert("您选中的文字:"+ my_selection.toString());alert("选中文字的开始位置:"+range.startOffset);alert("选中文字的结束位置:"+range.endOffset);类似如上代码,p被视为新的range,重新计算了,即是只计算到所选文字P的对应文字的所在位置。。 js数组保存的对象的属性变为空 一个老问题 动态添加有输入框的行 ie双击问题 在Array prototype里添加 和 动态添加 方法,执行效率差很多 JS怎样实现读取TEXTAREA内容并在下方重新写出来 不懂javascript,请懂的人帮帮忙 请问为什么innertext取出来的数据显示的是NaN啊,100分相送!!!!!!!! .的用法???没分了,帮忙啊~~~~ 哪里有EMCAScript、JavaScript、JScript各个版本差异的对照表? 请问qq空间的音乐播放器是怎么做的?没有使用flash。 extjs4 refs中配置ref,无法获取get方法
<html lang="en">
<body>
<p>123456</p><p>abcbf</p>
</body>
<script>
var sel=window.getSelection();
var rng=document.createRange();
var ps=document.getElementsByTagName('p')
sel.removeAllRanges();
rng.setStart(ps[0].childNodes[0],2);
rng.setEnd(ps[1].childNodes[0],2);
sel.addRange(rng);
</script>
</html>
var obj = document.getElementById(divId);
var tmpStr = obj.InnerHtml;
VAR b, startPos, endPos;
if (document.selection) {
// FOR IE
var sel = document.selection.createRange();
var pre = sel.boundingWidth/sel.text.length;
startPos = sel.boundingLeft/pre;
endPos = startPos+sel.text.length;
b = sel.text;
} else if (typeof obj.selectionStart == 'number'
&& typeof obj.selectionEnd == 'number') {
// FOR others
startPos = obj.selectionStart;
endPos = obj.selectionEnd;
b = tmpStr.substring(startPos, tmpStr.length-endPos);
} else {
startPos = endPos = 0;
b = tmpStr;
}
// Result 选中的文字:b,所在位置(startPos,endPos); startPos 与 endPos是指选中字符位置
}
在极速360浏览器当中使用,获取不到对象,还有IE当中的已经解决,请帮助集中解决非IE的浏览器即可。谢谢您的回复。
// FOR others
startPos = obj.selectionStart;
endPos = obj.selectionEnd;
b = tmpStr.substring(startPos, tmpStr.length-endPos);
}
这段即是针对非IE浏览器的,我木有装360,但是FF,Chrome, Safari, Opera都已支持
var obj = document.getElementById(divId);//这句就不是所有主流浏览器所支持的吧。
var tmpStr = obj.InnerHtml;另外在IE当中是显示的位置是小数点了的。
我这里是的html形式的.不是文本框的。
在Chrome,Opera都不行。
我这边测试引用时是:insertText('divID')。
还请指教。
alert("您选中的文字:"+ my_selection.toString());
alert("选中文字的开始位置:"+range.startOffset);
alert("选中文字的结束位置:"+range.endOffset);类似如上代码,p被视为新的range,重新计算了,即是只计算到所选文字P的对应文字的所在位置。。