我正在使用内置拼写检查程序Hunspell的WYSIWYG编辑器以及拼写错误单词的在线突出显示。我正在使用Webbrowser控件作为html处理程序。在webbrowser控件中,这是一种比html更容易拼写检查文本的方法,但是按照这种方式我丢失了所有的html格式。 所以问题是:有没有办法拼写检查body innertext然后用以前的格式将其转换为body innerhtml? (不使用HtmlAgilityPack或Majestic12或SgmlReader或ZetaHtmlTidy)。
提前致谢。
答案 0 :(得分:1)
与检查给定元素的innterText
属性的拼写相反,更好的方法可能是遍历子元素,并检查每个孩子的innerText
的拼写。
这种方法虽然可能限制基于上下文的拼写检查,但应保持标记不变。
注意:您可能需要考虑每个子节点还还包含其他子节点。
答案 1 :(得分:0)
我选择检查innerText属性的拼写,但是当替换任何更改的单词时,我在innerHTML中替换它们。更改拼写错误的单词的所有实例时,这很容易。只需使用正则表达式来收集innerHTML中所有匹配单词的索引并替换每个单词。
Regex wordEx = new Regex(@"[A-Za-z]", RegexOptions.Compiled);
MatchCollection mcol = wordEx.Matches(webEditor.Document.Body.InnerHtml);
foreach (Match m in mcol)
{
//Basic checking for whether this word is an HTML tag. This is not perfect.
if (m.Value == e.Word && webEditor.Document.Body.InnerHtml.Substring(m.Index -1, 1) != "<")
{
wordIndeces.Add(m.Index);
}
}
foreach (int curWordTextIndex in wordIndeces)
{
Word word = Word.GetWordFromPosition(webEditor.Document.Body.InnerHtml, curWordTextIndex);
string tmpText = webEditor.Document.Body.InnerHtml.Remove(word.Start, word.Length);
webEditor.Document.Body.InnerHtml = tmpText.Insert(word.Start, e.NewWord);
}
UpdateSpellingForm(e.TextIndex);
当替换单个实例时,我只是通过InnerText循环查找需要替换的实例。然后我循环使用InnerHTML,直到找到正确的实例并替换它。