我想做类似的事情。我的网站引用了我希望用户能够轻松复制的内容。我也想将作者的名字添加到字符串中。
通常情况下,我有用户选择设置为无,所以我创建需要时以编程方式应用类...
.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