2011-12-16 55 views
1

让我们先从代码:内DIV选择文本在Opera的JavaScript

<html> 
<head> 
<title>Opera bug test</title> 

<script type="text/javascript"> 
function callTest() 
{ 
    var oElem=document.getElementById("testDIV"); 

    if (window.getSelection) 
    { 
    var oCurSelection=window.getSelection(); 
    var curRange=document.createRange(); 
    curRange.selectNodeContents(oElem); 
    oCurSelection.removeAllRanges(); 
    oCurSelection.addRange(curRange); 
    } 
} 
</script> 
</head> 

<body> 
<a onclick="callTest();" style="text-decoration: underline; cursor: pointer">Select</a> 
<div id="testDIV"><span>Text TO Test!!!!</span></div> 
</body> 
</html> 

此代码的工作很好:点击链接 - >按Ctrl + C - > “文本,测试!!!!”在剪贴板中。好!

现在,在前面的代码让做一个微小的变化,行:

<div id="testDIV"><span>Text TO Test!!!!</span></div> 

取代有3条线路:

<div id="testDIV"> 
<span>Text TO Test!!!!</span> 
</div> 

字面上 - 只需插入HTML代码夫妇 '新线'。全都坏了!点击链接继续选择(可视化)文本,但Ctrl + C不会将其推入剪贴板。此外,即使是视觉选择也是......很奇怪,可以说。例如,在测试1中:点击链接 - >文本选择 - >点击页面上的空白处 - >文本DEselected。这是正常的行为。在测试2中:点击链接 - >文字选择 - >点击页面上的空白处 - >文本保留它的选择高亮!

这是什么?来自Opera的可怕的bug? :)

P.S.我在Windows XP SP3,Opera 11.60(build 1185)中做了实验。

+0

我在Opera上也发现了这样的问题。我认为这只是笨蛋。 – 2011-12-16 09:55:35

回答

1

这是歌剧院的问题与空textNodes(或换行内他们)

的解决方法是检查你的DIV中的子元素的节点类型,看看它们是元素

如:

var curRange=document.createRange(); 
    var children = oElem.childNodes, 
    ind, child; 

    for(ind in children) { 
     child = children[ind]; 
     console.log(child.nodeType); 
     if (child.nodeType == Node.ELEMENT_NODE) { 
      console.log(child); 
      curRange.selectNodeContents(child); 
      oCurSelection.addRange(curRange); 
     } 
    } 
    // oCurSelection.removeAllRanges(); 
    //oCurSelection.addRange(curRange); 
+0

是的,你是对的,你修复像魅力一样的作品!并且非常感谢用Opera特定的问题来清理那一刻。 – Smarty 2011-12-16 13:24:11