2009-05-27 92 views
1

我願做一個ASP.NET頁以下,對於Internet Explorer和Firefox:動態註釋HTML?

  1. 顯示在窗口中上傳的HTML文檔。
  2. 允許用戶使用標準文本光標突出顯示任意部分,然後按下「在此留言」按鈕。
  3. 保存高光的確切開始和結束點 - 不僅僅是高亮內容 - 並將它們與唯一ID相關聯。
  4. 通過覆蓋< span class =「highlight」>標記來突出顯示開始點和結束點之間的所有內容。

1和2是沒有問題的。但是對於3和4 ...這可能嗎?如果是這樣,我該怎麼辦?

如果這不能用於HTML文檔,純文本怎麼辦? (對於HTML,我們可以認爲它比較簡單,例如,我設想這個支持word文檔保存爲HTML。)

+0

聽起來雄心勃勃。在父文檔中嵌套適當節點的開始/結束點將是一場噩夢,尤其是在Word編寫的冗餘HTML編碼的情況下。 EEK! – 2009-05-27 22:21:43

+0

您是否簡單地稱「Word文檔保存爲HTML」? – 2009-05-27 23:06:19

回答

6

那麼你有一個問題。

假設這樣的文字:

Hello my 
name is 
Josh and 
this is an 
example for you 

其下是這樣的:

<span> 
    Hello my 
    <span> 
    name is<br/> 
    Josh and 
    </span> 
    <span> 
    this is an<br/> 
    example for you 
    </span> 
</span> 

然後假設我選擇:

Josh and 
this is an 

我選擇的HTML是:

Josh and 
</span> 
<span> 
    this is an 

所以,如果你圍繞一個範圍,你會最終搞砸了一些HTML。

所以,我提出以下建議:

  • 從所選文本

你這樣結束了獲取選中的文本使用javascript

  • 地帶的HTML標籤
    function getSelectedTextNoHtml() { 
        return getSelectedText().replace(/(<([^>]+)>)/ig, ""); 
    } 
    
    function getSelectedText() { 
        if (window.getSelection) 
         return window.getSelection(); 
        else if (document.getSelection) 
         return document.getSelection(); 
        else if (document.selection) 
         return document.selection.createRange().text; 
        return ""; 
    } 
    

    然後,您可以採取整個文檔的HTML,去除HTML標記和fi nd在文檔的文本版本中選擇文本的索引。

    我甚至可以想到(醜陋但可行)的獲取HTML選擇索引的方法。但我警告你,如果你想要他們,他們是醜陋的。

    還有甚至非常醜陋的方式來使用您想要的唯一ID在選定的文本週圍整齊地找到一個範圍。當然,總有辦法做東西。一切都只是一個算法。但它會涉及到一個好日子的工作磨礪它!

    我已經發布了足夠的內容,如果你想讓我詳細說明,就問一下!

    UPDATE:

    OK,你問它:)

    • 對選定的文本和日誌某處
    • 的東西絕對是獨一無二的
    • 查找暫時代替選中的文本那個完全獨特的文字的索引
    • 更改文字返回

    如果要謹慎地做沒有自己的文字閃爍和改變,你可以嘗試服用HTML的優點零寬度空間:

    &#8203; 
    

    棒,在它前面的100倍,並找到100個零寬度空間的索引!

    當然,它會失敗,如果他們的文件有100個零寬度空間他們所選擇的其他地方的文本,但在這一點上,我說:「讓它失敗」 :)

    Howzat?