2011-07-29 203 views
2

什麼是允許用戶在網頁上的文本塊內發佈內嵌評論的有效方式?允許用戶發佈內嵌評論

例如,如果有一個物品如:

congue eget ipsum的。 Cum sociis natoque penatibus et magnis dis parturient montes,nascetur ridiculus mus。

我希望網頁的訪問者能夠評論一些文本,他們可以選擇幾個詞並開始輸入內嵌評論。由於文本可以被編輯,然後單詞數字不準確,所以爲單詞指定一個索引以使每個單詞都有數字。

更改存儲的文本併爲每條評論添加一些標記有什麼問題嗎?如:

congue eget ipsum。 Cum sociis natoque <user:123;comment:123>penatibus et magnis</user:123;comment:123> disparturient montes,nascetur ridiculus mus。

這樣我就可以解析文本,然後從數據庫中取出註釋並將它們顯示爲內聯或氣球或其他內容。

有沒有更好的解決方案呢?

回答

2

那麼首先,更改底層標記不會很好,因爲如果內聯評論重疊會發生什麼?

當文本被編輯時會發生什麼情況,以致被更改的單詞包含內嵌評論?

沒有更具體的規範,確實沒有「完美」的做法。我建議按照您的建議將評論存儲爲單詞索引。如果文本被修改,請在舊版本和新版本之間運行差異。使用此差異,您可以嘗試更新內嵌評論的索引,並刪除放置在修改過的文本片段上的評論。

2

我會使用JavaScript來檢索選定的文本,然後計算它的位置從開始到選定的文本計數字符。所以在數據庫中我會存儲評論,選擇的「開始」位置和「長度」。這個解決方案的問題是,你不能改變原文,因爲如果你這樣做,那麼你必須更新所有評論的位置(其中一些評論可能需要刪除)

這是很容易的部分。困難的部分是顯示由於@tskuzzy列出的所有問題的意見(重疊評論)

這裏有一個小實驗,我沒有:

http://jsfiddle.net/5jNg9/1/

<div id="content"> 
congue eget ipsum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. 
</div> 
<input type="button" onclick="checkSelection()" value="Get Selection"/> 

<script> 
function checkSelection(){ 
    var text = document.getElementById('content').innerHTML; 
    var selection = document.getSelection(); 
    if(selection == ""){ 
     alert("cmon' at least select something first!"); 
    } else{ 
     var start = text.search(selection); 
     alert("selection starts at character: "+ start + 
       "\n and ends at character: "+(selection.length + start - 1) + "\n" + 
       "the selected text is: '"+selection+"'"); 
    } 
} 
</script>