是的,有一种方法。 textRange提供了很多方法/属性,例如确定位置。
所以,如果你说,这不是一个真正的副本,但是相同的,你可以获取frame1的位置,并在frame2上创建一个新的选择。
我玩了一点点,这里的结果:
<html>
<head>
<title>title</title>
<script type="text/jscript">
<!--
function cloneSelection()
{
if(!document.all || window.opera)
{
alert('this is an jscript-example for MSIE5+');
return;
}
var editors=window.frames;
editors[0].focus();
//create 2 ranges in the first iframe
var r1=editors[0].document.selection.createRange();
var r2=editors[0].document.selection.createRange();
//checkout if a control is selected
if(editors[0].document.selection.type==='Control')
{
var obj=r1.item(0);
var objs=editors[0].document.body.getElementsByTagName(obj.tagName);
//iterate over the elements to get the index of the element
for(var i=0;i<objs.length;++i)
{
if(objs[i]===obj)
{
//create a controlRange, add the found control and select it
var controls=editors[1].document.body.createControlRange();
controls.add(editors[1].document.body.getElementsByTagName(obj.tagName)[i]);
controls.select()
return;
}
}
//control-branch done
}
//no control was selected, so we work with textRanges
//collapse the 2nd range created above
r2.collapse(false);
//store the positions of the 2 ranges
var x1=r1.offsetLeft;
var y1=r1.offsetTop;
var x2=r2.offsetLeft;
var y2=r2.offsetTop;
//create ranges in the 2nd iframe and move them to the stored positions
var r2=editors[1].document.body.createTextRange();
r2.moveToPoint(x1,y1);
var r3=editors[1].document.body.createTextRange();
r3.moveToPoint(x2,y2);
//set the move the end of the first range to start of the 2nd range
r2.setEndPoint('EndToStart',r3);
//select the first range
r2.select();
}
//fill the iframes and make them editable
window.onload=function()
{
var editors=window.frames;
for(var i=0;i<frames.length;++i)
{
with(frames[i].document)
{
open();
write('This is text is an image '+
'<br/><img src="http://sstatic.net/ads/img/careers-ad-header-so.png"><br/>'+
'this is inside this frame');
designMode='On';
close();
}
}
}
//-->
</script>
<style type="text/css">
<!--
iframe{width:400px;height:200px;}
-->
</style>
</head>
<body>
<center>
<iframe src="about:blank"></iframe>
<input type="button" value="cloneSelection()" onclick="cloneSelection()">
<iframe src="about:blank"></iframe>
</center>
</body>
</html>
test with jsFiddle
注意,此演示到目前为止是建立MSIE只有(你写过你喜欢用JScript做^^)。
但它应该也可以实现它为其他浏览器。
这个额外的iframe:你是否将原始iframe中的整个HTML复制到它? – 2010-10-05 22:35:03
不复制它,但我们可以假设额外的iframe的内容是相同的。所以不知何故,我必须知道“第一个字被选中”,或“第三个图像”,或“第二个字和下一个段落和下表”,然后在额外的iframe中选择相同的东西。 – Krumelur 2010-10-06 12:29:11
我的编辑:添加了一些标签 – 2010-11-09 22:53:04