我想做類似的事情。我的網站引用了我希望用戶能夠輕鬆複製的內容。我也想將作者的名字添加到字符串中。
通常情況下,我有用戶選擇設置爲無,所以我創建需要時以編程方式應用類...
.editable {
user-select: text;
-webkit-user-select: text;
-moz-user-select: text;
-ms-user-select: text;
-o-user-select: text;
}
所有的報價都在一個名爲「paragraph_quote」級。當站點訪問者點擊報價,後續序列發生:
$(".paragraph_quote").on("click", function() {
var addendum = " [by Author]";
if (! $(this).attr("contenteditable") || $(this).html().indexOf(addendum) === -1) {
$(this).removeData("quote")
.data("quote", $(this).html())
.html($(this).html() + addendum)
.attr("contenteditable", true)
.addClass("editable")
.focus()
;
}
document.execCommand('selectAll', false, null);
}).on("blur", function() {
$(this).removeClass("editable").html($(this).data("quote"));
});
看看,看看下面的步驟已經執行(即用戶是否點擊了裏面的相同第二次段)。如果這是第一次,請執行步驟2到步驟7.如果不是,則步驟8。
如果這不是第一次單擊報價單,則刪除可能已存儲的任何數據。
將引用的HTML存儲爲數據。這允許您修改副本的HTML(如果您願意),然後輕鬆地將其恢復到原始狀態。
向HTML中添加任何其他文本(例如作者姓名)。不顯示如下:我還使用.replace()刪除任何特殊的HTML字符,如非分離空格,em-dashes等。
使段落可編輯。
添加可編輯類。
將焦點設置爲段落。可編輯類確保焦點輪廓的外觀。
選擇可編輯段落的全部內容。並不是說這個步驟很有用,即使其他步驟已經被採用了,因爲如果用戶在選擇內點擊,它會導致整個選擇被重新突出顯示。
當用戶點擊該段的外,刪除編輯類和...
的HTML還原到其先前狀態(如果修改,如步驟4所示,上文)。
我認爲,出於安全原因,不允許操縱用戶選擇。這將是非常邪惡的。這就好像某人說「嗨」,你會讓他說「我想要一個比薩餅」,接受它作爲比薩餅的訂單,並讓他支付它... – 2010-11-12 14:07:20
@Justin,也許,但我'只是讓用戶在這種情況下選擇一個文本塊更簡單。該腳本只是被用作允許點擊事件(他們發起)來完成選擇(許多用戶覺得難以做到)的快捷方式。 – 2010-11-12 14:20:20
@Justus,是的,但是無論如何,你會在服務器端做到這一點,讓客戶*看到*你的命令搞砸了'惡'級別的低端(和愚蠢的高端'scale)... = b – 2010-11-13 12:51:19