我认为你可能会更好地创建一个span或div,并将其样式设置为粗体或任何你想要的,然后插入它。浏览器的差异意味着它会变得非常混乱。下面是我的意思的例子:
http://jsfiddle.net/nsfPN/
function pasteBoldHtmlAtCaret(html) {
pasteHtmlAtCaret('<span style="font-weight: bold;">' + html + '</span>');
}
另一种方法是选择插入HTML,发送命令将其设置为粗体(如果不是大胆的话),然后设置光标位置在插入的html之后。然后,您需要确保在此之后键入/插入的任何文本不是粗体(或确保它是如果您想要的话)。所有这些步骤都会受到不同浏览器实现的变幻莫测的影响。
编辑: 如果你需要做的是插入一些文字,需要对当前的风格,你并不需要支持某些旧的浏览器,那么你可以只使用insertText命令,像这样:
function pasteTextWithStyle(html) {
if (document.queryCommandEnabled('insertText')) {
document.execCommand('insertText', false, html);
} else {
// TODO: If the browser doesn't support insertText,
// check current styles and manually apply them...
}
}
请参阅:我目前无法在iPhone上进行测试,但至少在一段时间内它已被webkit支持,因此它应该可以正常工作。
不完全我在找。我有很多带有样式的按钮(粗体,斜体,下划线..),我使用它们将格式应用于我的可编辑div。一切工作都与键盘按键有关,但如果我有一个插入文本'xpto'的按钮,它将插入文本,但不会保留插入它之前插入符号的相同样式。如果我正在写一个文本,它是大胆的,当我点击我的'xpto'按钮,它会插入'xpto',但它不是大胆的.....我只需要它的Safari浏览器,因为它的工作在iphone – F79
@PSF啊, 我懂了。我的编辑更多你在说什么?如果是这样,它需要在iPhone上进行测试。 – ChrisD
作品完美!我曾尝试过使用document.execCommand('insertHtml',false,html);但永远不会记得document.execCommand('insertText',false,html); – F79