2013-06-05 99 views
0

我正在开发富文本编辑器。下面是一个示例代码ilustraste它pasteHTML无法运行前的document.exec命令

http://jsfiddle.net/paulofreitas/RG3Bd/

如果我document.execCommand ('bold', false, null)之前pasteHTML插入一些文字,这是行不通的。我想发送命令'bold',然后用pasteHTML插入一些特殊的文本,并使该文本变为粗体。

我使用粗体作为示例,但可以是任何execCommand。

任何帮助?

回答

2

我认为你可能会更好地创建一个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支持,因此它应该可以正常工作。

+0

不完全我在找。我有很多带有样式的按钮(粗体,斜体,下划线..),我使用它们将格式应用于我的可编辑div。一切工作都与键盘按键有关,但如果我有一个插入文本'xpto'的按钮,它将插入文本,但不会保留插入它之前插入符号的相同样式。如果我正在写一个文本,它是大胆的,当我点击我的'xpto'按钮,它会插入'xpto',但它不是大胆的.....我只需要它的Safari浏览器,因为它的工作在iphone – F79

+1

@PSF啊, 我懂了。我的编辑更多你在说什么?如果是这样,它需要在iPhone上进行测试。 – ChrisD

+0

作品完美!我曾尝试过使用document.execCommand('insertHtml',false,html);但永远不会记得document.execCommand('insertText',false,html); – F79