Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.01.2011, 18:59
Новичок на форуме
Отправить личное сообщение для Fobius Посмотреть профиль Найти все сообщения от Fobius
 
Регистрация: 19.01.2011
Сообщений: 3

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, но решить проблему не придумал как. Второй случай для меня несколько загадочен.

Дайте пинок в нужную сторону пожалуйсто...
Ответить с цитированием
  #2 (permalink)  
Старый 19.01.2011, 19:12
Аватар для Amphiluke
   ☽
Отправить личное сообщение для Amphiluke Посмотреть профиль Найти все сообщения от Amphiluke
 
Регистрация: 07.01.2011
Сообщений: 254

Сообщение от Fobius
надо узнать, находится ли выделеный текст в нужном мне блоке.
Вообще-то для FF есть свойство commonAncestorContainer, а для IE — метод parentElement().
Ответить с цитированием
  #3 (permalink)  
Старый 19.01.2011, 19:57
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Если немного пошаманить результатом getText(), то с переносами проблем не будет:
var string1 = 'ab\nc', string2 = 'abc';
alert(string1 == string2);
string1 = string1.replace(/[\f\r\n]/g, '');
alert(string1 == string2);
Ответить с цитированием
  #4 (permalink)  
Старый 20.01.2011, 11:25
Новичок на форуме
Отправить личное сообщение для Fobius Посмотреть профиль Найти все сообщения от Fobius
 
Регистрация: 19.01.2011
Сообщений: 3

Попробовал добавить:
.replace(/[\f\r\n]/g, '');

Подействовало только в IE и Opera. В FF ничего не изменилось.
Подумал, решил на всякий случяй еще убрать <br />. Дописал:
.replace(/<\/?[^>]+>/gi, '');

Никакого результата.
Amphiluke,
Да способ может и не самый оптимальный, со временем всеравну буду еще 20 раз переделывать, но сама ситуация меня интересует, неразберусь - будут кошмары сниться))
Ответить с цитированием
  #5 (permalink)  
Старый 20.01.2011, 11:30
Новичок на форуме
Отправить личное сообщение для Fobius Посмотреть профиль Найти все сообщения от Fobius
 
Регистрация: 19.01.2011
Сообщений: 3

У меня выводятся спецсимволы в entity encode, может это что мешает, хоть и мало вероятно.
И никак не могу найти закономерность ошибки в FF - комбинация "буква+пробел+буква" в некоторых местах не выдает совпаденя а в некоторых выдает, и пробелы везде обычные.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по работе с плагином Fancybox dr_fucker jQuery 1 03.11.2010 11:53
WebVisor - мешает нормальной работе Gvozd Сайт Javascript.ru 3 01.10.2010 00:06
Не работает IndexOf 3042 Общие вопросы Javascript 16 31.08.2010 16:19
Access is denied при работе с iFrame slivka_83 Общие вопросы Javascript 1 30.09.2009 10:05
вопрос о работе getElementById(id) gosha_kap Общие вопросы Javascript 1 17.07.2009 07:23