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, время: 11:28. |