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을 반복했습니다.
코드 예제를 게시하고 해당 컨트롤을 사용할 때 결과가 어떻게 나타나면 서식을 잃어 버릴 수 있습니까? –
hunspell 웹 사이트의 샘플 코드 스 니펫을 사용하고 있습니다. innertext에서 맞춤법이 틀린 단어를 강조 표시 할 수는 있지만 서식을 잃지 않고 innerhtml에서 할 수는 없습니다. 솔직하게 말하면, innerhtml을 분석하고 철자를 검사하는 것은 엉덩이에 고통 (태그에 싸여있는 단어를 골라 내고, 다른 태그에서 맞춤법이 틀린 단어를 감싸서 강조 표시합니다. 또한 한 단어는 여러 태그로 구분 될 수 있습니다). 그래서 html을 텍스트로 변환하는 쉬운 방법에 대해 묻습니다. –