叮叮铛 发表于 2010-2-9 12:09:47

[bound0大哥帮忙]HTML编辑器任意设置字号大小


<p ><strong>win32fan</strong> 发表于 2010-1-19 00:11</p>
<h3>HTML编辑器任意设置字号大小</h3>下面是bound0大哥06年的贴子:
[突破]HTML在线编辑器任意设置字号大小(请大家检查bug)

我的环境是VS2005C# Webbrowser控件。我思路与bound0大哥基本一致。核心都是通过定位SelText,然后修改之,最后设置body.htmlText。

我遇到的问题是:
1。我无法用getBookmark/moveToBookmark来重新高亮设置文字。在设定了body.htmlText后,moveToBookmark都返回了false。我只好采用另一方法:先大概确定选择区位置,再findText。虽然该方法不太可靠,但能满足一般要求。

2。要命的问题是:我设置一段文字的字体大小,第一次总是精确而且成功的,紧接着再设置该段文字字体大小就失败了。我检查代码发现:原因出在moveEnd上。
(注:我'磨'的原理是:
任何时候,document.selection.createRange().htmlText取出来的html代码都是完整成对的,
  IE会自作主张地把不完整的标签补齐。HtmlSelection类的SelectHtmlTextPosition属性就是
  要代替document.selection.createRange().htmlText,获取页面中选中文本的html内容。

  原理:
  将选择区(document.selection.createRange)向前扩展至整个html文本开头。则新选区html文
  本构成可以是:添充的html标签+前html文本+selection文本+添充的html标签。

  将选择区向后扩展至整个html文本结尾。则新选区html文本构成可以是:
  添充的html标签+selection文本+后html文本+添充的html标签。

  再获取BodyText,它结构是:
  前html文本+selection文本+后html文本

  比较三个结构:
  结构PrevText: 添充的html标签 + 前html文本 + selection文本 + 添充的html标签(selection.createRange扩展至头部)
  结构BodyText:      前html文本 + selection文本 + 后html文本  (BodyText)
  结构BackText: 添充的html标签 + selection文本 + 后html文本 + 添充的html标签(selection.createRange扩展至尾部)
  
  操作:
  将PrevText和BodyText开头的html标签除去,它们将变成:
  PrevText:html文本 + selection文本 + 添充的html标签
  BodyText:html文本 + selection文本 + 后html文本
  通过比较,可以得出selection文本结尾位置。

  类似通过操作BodyText和BackText,可以得到selection文本开始位置。这样就确立了原始selectionText。)
我给了moveEnd一个足够大的正值,但它却未能移动至页面未尾,导致我"磨"失败。

如果我第一次设置了一段文字字体大小后,先保存并关闭程序,再打开程序设置该段字体,OK。就是不能连续设置,第二次总是moveEnd失败。

急切能够和bound0大哥交流,我QQ是184263203<p ><strong>win32fan</strong> 发表于 2010-1-19 10:43</p>
自己顶一下<p ><strong>win32fan</strong> 发表于 2010-1-20 03:27</p>
难道要沉了么,bound0大哥..<p ><strong>win32fan</strong> 发表于 2010-1-20 19:29</p>
再up<p ><strong>bound0</strong> 发表于 2010-2-1 11:11</p>
0、不好意思今天我才看见这个贴子;
1、没源码则没问题;
2、你可以考虑直接使用我的代码(来签个合同吧:D );
3、还有一个解决方案是某商业版编辑器的做法,在我发表那个贴子之后他们也出了这个功能,但他们和我的思路还是有所不同的(我可没暗示你去反混淆人家的源码哦……)。<p ><strong>win32fan</strong> 发表于 2010-2-4 13:44</p>
原以为我的贴子就这么沉下去了,今天惊喜发现bound0大哥给我回了贴:)

bound0大哥,我的环境是C#。所以没法直接用你源码。

我说一个最致命问题,C#环境下,当我赋了新的htmlBodyText后,不知为什么系统会给我在某些地方加减一半个换行符或空格,直接造成我重新select的困难。。

那个商业版编辑器叫什么名字啊;-)<p ><strong>win32fan</strong> 发表于 2010-2-4 13:48</p>
总而言之,目前我遇到的问题就是定位问题,即确定选择文字的位置,之后的操作在无所不能的正则表达式下,还是没啥大问题的:)

页: [1]
查看完整版本: [bound0大哥帮忙]HTML编辑器任意设置字号大小