indexOf - недочеты в работе
Беру выделеный на странице текст
function getSelText() {
var txt = "";
if (window.getSelection) {
txt = window.getSelection();
} else if (document.getSelection) {
txt = document.getSelection();
} else if (document.selection) {
txt = document.selection.createRange().text;
}
return txt;
}
Далее собираю весь текст из нужного блока
function getText(n) {
var strings = [];
getStrings(n, strings);
return strings.join("");
function getStrings(n, strings) {
if (n.nodeType == 3 )
strings.push(n.data);
else if (n.nodeType == 1 ) {
for(var m = n.firstChild; m != null; m = m.nextSibling) {
getStrings(m, strings);
}
}
}
}
Теперь надо узнать, находится ли выделеный текст в нужном мне блоке.
var text = getSelText();
content = getText( document.getElementById("blockid") );
if (content.indexOf( text ) != -1) {
alert("OK");
}
Все работает нормально. Вот только если выделить текст с переводом строки, тут уже совпадение не получается. Еще если в FF стоят подряд буква+,+ +буква то тоже совпадений не находит Смысл происходящего я понимаю: в первом случяе в строке воспринимает перевод как пробел и перевод как \r n, но решить проблему не придумал как. Второй случай для меня несколько загадочен. Дайте пинок в нужную сторону пожалуйсто... |
Цитата:
|
Если немного пошаманить результатом getText(), то с переносами проблем не будет:
var string1 = 'ab\nc', string2 = 'abc'; alert(string1 == string2); string1 = string1.replace(/[\f\r\n]/g, ''); alert(string1 == string2); |
Попробовал добавить:
.replace(/[\f\r\n]/g, ''); Подействовало только в IE и Opera. В FF ничего не изменилось. Подумал, решил на всякий случяй еще убрать <br />. Дописал: .replace(/<\/?[^>]+>/gi, ''); Никакого результата. Amphiluke, Да способ может и не самый оптимальный, со временем всеравну буду еще 20 раз переделывать, но сама ситуация меня интересует, неразберусь - будут кошмары сниться)) |
У меня выводятся спецсимволы в entity encode, может это что мешает, хоть и мало вероятно.
И никак не могу найти закономерность ошибки в FF - комбинация "буква+пробел+буква" в некоторых местах не выдает совпаденя а в некоторых выдает, и пробелы везде обычные. |
| Часовой пояс GMT +3, время: 07:07. |