2011-12-16 54 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