Я создаю основанное на документе приложение в Какао / Obj-C, которое позволит пользователю выбрать слово в веб-представлении и нажать кнопку, которая обернет выбранный текст в случайный хеш-узел. Например:
Этот документ отображается в моем веб-представлении:
<html>
<body>
<div>Hello to everybody</div>
</body>
</html>
Предположим, что слово Hello выбрано пользователем в webView, и они нажали кнопку на интерфейсе, который вызывает эту функцию:
NSString *randString = [myRandStringGenerator generateString];
NSString *selectedWords = [[webView getSelectedDOMRange] toString];
NSString *toWrite = [NSString stringWithFormat: @"<%@>%@</%@>", randString, selectedWords, randString];
[webView replaceSelectionWithMarkupString:toWrite];
Эта функция приведет к DOMDocument
, который идентичен оригиналу. ОДНАКО , если выделение НЕ содержит первый символ в данном узле (в данном случае это так), функция работает отлично!
Таким образом, если пользователь выбирает «ello to» в веб-представлении и вызывается вышеуказанная функция, вывод будет:
<html>
<body>
<div>H<kljsdhfla>ello to</kljsdhfla> everybody</div>
</body>
</html>
Так что мой вопрос - почему эта функция завершается ошибкой, когда выбранный DOMRange
включает первый символ внутри #text из DOMNode
и завершается успешно, если его нет?
Кроме того - я пробовал эту же функцию, используя функцию [webView replaceSelectionWithNode:myNode]
с точно таким же эффектом.