Posted in Javascript onAugust 28, 2011
刚和同事讨论了一个很有趣的问题,有个idea,需要记录用户在页面选中的内容,在ff和ie9下有w3c的dom2级事件createRange,这里不再累赘。主要问题是在IE6,7,8只能通过createTextRange选中热区。假如我们知道用户选择开始元素和偏移量,以及结束元素以及偏移量,那么我们可以用下面的例子把用户选择的内容用js给标记起来
<head> <script> function mark() { var b= document.getElementById ("b"); var b1= document.getElementById ("b1"); var b2= document.getElementById ("b2"); var a1 = document.body.createTextRange(); a1.moveToElementText(b); a1.moveStart('character',17); var a2 = document.body.createTextRange(); a2.moveToElementText(b1); a2.moveEnd('character',-2); a1.setEndPoint ("EndToEnd",a2); a1.select(); }</script> </head> <body> <div id="b">The <b>contents</b> of the <i>source</i> element.</div> <div id="b1">The <b>contents</b> of the <i>source</i> element.</div> <div id="b2">The <b>contents</b> of the <i>source</i> element.</div> <button onclick="mark();">Mark</button> </body>
ok,从上面的代码,我们可以知道,在IE6,7,8下,需要关联多个元素的选择时候,我们需要创建两个textRange,一个是开始节点,以及偏移量,还有一个结束节点,以及偏移量,两个textRange用a1.setEndPoint关联
参考文档:http://help.dottoro.com/ljgbbkjf.php
IE6,IE7,IE8下使用Javascript记录光标选中范围(已补全)
声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
Reply on: @reply_date@
@reply_contents@