2014-04-07 54 views
12

我執行JavaScript的這些簡單的排在最新即11,只是選擇一個div的Javascript:錯誤800a025e使用範圍選擇

這裏從IE11開發工具截圖的所有內容

Code and error - screenshot

正如你所看到的,IE改變我說:「由於錯誤800a025e無法完成操作」。

我無法理解問題的性質,來源,也沒有人看到其他堆棧溢出問題給我一個明確的答案。

這是我selectText jQuery的 「個人」 擴展

jQuery.fn.selectText = function(){ 
    var doc = document; 
    var element = this[0]; 
    // console.log(this, element); 
    if (typeof element == 'undefined') { 
     return; 
    } 
    if (doc.body.createTextRange) { 
     var range = document.body.createTextRange(); 
     range.moveToElementText(element); 
     range.select(); 
    } else if (window.getSelection) { 
     var selection = window.getSelection();   
     var range = document.createRange(); 
     range.selectNodeContents(element); 
     selection.removeAllRanges(); 
     selection.addRange(range); 
    } 
}; 

元素在這種情況下完整的代碼是

[Object HTMLTableElement] 

編輯1:用少許國防部:

var range = document.body.createTextRange(); 
var retval = range.moveToElementText(element); 
console.log (retval); 
range.select(); 

我可以說你retval是未定義的。 這段代碼在沒有問題的情況下工作,因此元素選擇器很好。 jQuery的版本是1.11

+0

'var retval = range .moveToElementText(element);'什麼是retval? – epascarello

+0

是的,但我正在編程的PHP/JS,在Linux服務器上... – realtebo

+0

你說這個問題發生在IE 11,這是Linux不支持據我所知。 –

回答

7

我使用這個技巧解析:

我裹HTML表格用DIV

我使用相同的代碼,按原樣沒有變化,對DIV,而不是用於僅選擇表格。

它的工作。

大概HTML表格是不是IE

+2

我用這個簡單的答案拯救了我自己的生命...... – realtebo

1

可選文本試圖window.getSelection().removeAllRanges();,當我得到這個錯誤,也沒有選擇。一個解決辦法是檢查是否存在選擇第一:

if (window.getSelection().getRangeAt(0).getClientRects.length > 0) { 
    window.getSelection().removeAllRanges(); 
} 

而且,這個問題是Could not complete the operation due to error 800a025e重複,但我不能將其標記爲這樣的,因爲其他的問題沒有一個公認的答案。

+0

這個建議在邏輯上是有道理的,但它不起作用。返回的錯誤代碼不是由於清除了未定義的範圍 - 實際上是由removeAllRanges()正確處理的。 Intead錯誤與表格單元格有關。 – kamelkev

4

以上建議或提示都不能正確解決此特定問題。

該問題本身是由非文本(例如表格)元素與TextRange集合中的其他元素一起收集引起的。試圖在這些表格元素保留在集合中時清除集合將無條件地導致上面報告的錯誤。

該問題影響IE 9/10/11,並且針對每個瀏覽器都有特定的解決方法。不幸的是,這些解決方法與其他瀏覽器(firefox,safari,chrome,edge)不兼容,所以我們需要特別處理IE 9/10/11的清除處理,同時爲更符合標準的瀏覽器提供備用處理。以下出現在各處都起作用,至少在本文寫作:

 if (doc.body.createTextRange) { // All IE but Edge 
     var range = doc.body.createTextRange(); 
     range.collapse(); 
     range.select(); 
     } 
     else { 
     doc.getSelection().removeAllRanges(); 
     } 

的IE特定分支是清除含有表元素的範圍內,而無需實際調用空()方法,其以其它方式導致麻煩的迂迴的方式例外。

+0

感謝您的回答,我會在幾天內進行測試 – realtebo