Я решил проверить орфографию свойства 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, пока не нашел правильный экземпляр и не заменил его.