2016-07-28 27 views
0

的JavaScript getSelection問題

if (!window.x) { 
 
    x = {}; 
 
} 
 

 
x.Selector = {}; 
 

 
x.Selector.getSelected = function() { 
 
    if (window.getSelection) { 
 
    t = window.getSelection(); 
 
    } else if (document.getSelection) { 
 
    t = document.getSelection(); 
 
    } else if (document.selection) { 
 
    t = document.selection.createRange().text; 
 
    } 
 
    return t; 
 
} 
 

 
function htmlSpanHlt() { 
 
    element = document.createElement("span"); 
 
    element.setAttribute('class', 'hlt'); 
 
    return element; 
 
} 
 

 
function highlight_text(sel) { 
 
    span = htmlSpanHlt(); 
 
    if (sel.getRangeAt) { 
 
    range = sel.getRangeAt(0); 
 
    } 
 
    span.appendChild(range.extractContents()); 
 
    range.insertNode(span); 
 
}
<div class="highlight"> 
 
    <p> 
 
    Lorem ipsum dolor sit amet, eu ius autem labitur complectitur, eos aliquip nostrud ei, ludus erroribus vel ex. Sea ex erat quaeque intellegam, et diam iusto deterruisset sea. Summo minimum periculis pro ea, diam soleat id pro. Cu putent inimicus eum, 
 
    hinc comprehensam ex qui. Delectus appetere interesset ad mel. 
 
    <br> 
 
    <br>Ius ut quis summo utroque, in sea numquam percipit eloquentiam. Vidit mucius iudicabit ius id. Id mel vero dolorem. Sale lorem tempor ius ex, commodo reprehendunt pro cu. Mel ea accumsan mentitum liberavisse, labores fabellas per te. 
 
    </p> 
 
</div>

當我突出顯示文本通常像拖動鼠標,一切都會好起來。問題是:例如,當我雙擊文本多次或甚至一次,當然一切都會被選中,但一些已經突出顯示的文本將恢復正常。你能幫我解決這個問題嗎?非常感謝。

+0

它應該正常工作;怎麼了?我無法看到您目前給出的問題。你包括代碼是很好的,但是你可以使用jsfiddle或類似的代碼將它放入一個工作示例中嗎?這將幫助我們看到發生了什麼問題。 – Whothehellisthat

+0

如果你真的瞭解代碼,如果你知道如何編碼你會跟蹤它。不知何故,這是一個問題。雙擊文本然後一些恢復正常是不正常的。無論如何,我明白你的一面。 –

+0

「不知何故,這是一個問題。」但問題是什麼?或者:您雙擊,突出顯示一些文字,但某些應該突出顯示的文字未突出顯示,這是問題所在。或者:你雙擊,突出顯示一些文字,代碼不會正確捕捉所有突出顯示的文字,使其看起來像一些文字實際上沒有突出顯示。或者:雙擊,突出顯示一些文本,某些文本沒有突出顯示(無論出於何種原因預期),但在這些情況下,代碼會以某種方式混淆。這將有助於有更多的細節,或一個工作示例來查看問題所在。 – Whothehellisthat

回答

0

事情要考慮:

Range.extractContents可能不是你想要使用的功能。它從頁面中刪除內容並將其放入臨時DocumentFragment(在內存中,而不是在頁面中)。

...雖然看起來這可能是故意的,但在highlight_text()函數中。沒有任何背景,我不能確定。

運行該代碼片段似乎沒有搞亂瀏覽器中的任何突出顯示,無論是單擊還是拖動,還是雙擊或以其他方式。在第一次點擊時,當前突出顯示的文本將不高亮 - 也許這就是您的意思?

+0

如果沒有先了解您正在嘗試解決的問題,就很難獲得非常接近的任何有用信息。但是這裏有些事情可能會或可能不會有用。不是真正的「答案」,但也許這將有助於反正。 – Whothehellisthat

+0

highlight_text()函數是的。是的也許範圍extractContents是這個錯誤的方法,但這是我唯一的方式來覆蓋亮點到目前爲止。 –

+0

如果只是爲了突出顯示樣式,您可以使用CSS來做一些這樣的事情。如果只是爲了能夠顯示一個彈出窗口或操作文本而獲得對文本的引用,那麼您可以使用該引用,而不是將其刪除並重新添加。您要做什麼壓倒亮點?也許我可以有更多的幫助。 – Whothehellisthat