 
			
				27.08.2013, 15:19
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 12.12.2012 
					
					
					
						Сообщений: 1,398
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
var text1 = "Мама мыла очень кривую раму";
var text2 = "Мама долго мыла кривую раму";
        var arr1 = text1.split(' ');
        var arr2 = text2.split(' ');
        var result1 = [], result2 = [];
        for (var i = 0; i < arr1.length; i++) {
            if (arr2[i] == undefined) {
                for (var j = i; j < arr1.length; j++) {
                    arr1[j] = "<span class='changedText'>" + arr1[j] + "</span>";
                }
                break;
            }
            if (arr1[i] != arr2[i]) {
                if (findInArray(arr1[i], arr2)) {
                    arr1.splice(i, 0, arr1[i]);
                    arr2[i] = "<span class='changedText'>" + arr2[i] + "</span>";
                    if (result1[result1.length - 1] != arr1[i])
                        result1.push(arr1[i]);
                    result2.push(arr2[i]);
                } else {
                    arr2.splice(i, 0, arr2[i]);
                    arr1[i] = "<span class='changedText'>" + arr1[i] + "</span>";
                    result1.push(arr1[i]);
                }
            } else {
                if (result1[result1.length - 1] != arr1[i])
                    result1.push(arr1[i]);
                result2.push(arr2[i]);
            }
        }
        function findInArray (element, array) {
            var find = false;
            for (var i = 0; i < array.length; i++) {
                if (array[i] == element)
                    find = true;
            }
            return find;
        }
alert(result1.join(' '));
alert(result2.join(' '));
Вроде работает, но есть косяки:
 
Не придумал что делать если новый текст длиннее исходного (я пробегаюсь только по исходному массиву).
 keen, 
Как Вы и говорили косяки со знаками препинания. Вроде это можно сделать регулярными выражениями, но в них я не силен, как бы мне выделить в отдельные элементы массива знаки препинания так, чтобы потом оно нормально склеилось в строку и не потерять при этом знаки?
 
И ещё, мой алгоритм не выводит в первом массиве 2 одинаковых слова    
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось tsigel, 27.08.2013 в 16:13.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				27.08.2013, 15:49
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 22.06.2012 
					
					
					
						Сообщений: 168
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от tsigel
			
		
	 | 
 
	| 
		И ещё, мой алгоритм не выводит в первом массиве 2 одинаковых слова
	 | 
 
	
 
 А, вообще, почему из первого массива должно что-то выводится?
 
____________
 
	
 
	| 
		
			Сообщение от tsigel
			
		
	 | 
 
	| 
		Есть 2 текста, по идее эти тексты должны не сильно отличаться друг от друга. Задача найти изменения в этом тексте и выделить цветом.
	 | 
 
	
 
 "в этом тексте"  - в каком именно: в 1-ом или 2-ом или в обоих сразу?
 
Приведите примеры.  
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось Demath, 27.08.2013 в 15:52.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				27.08.2013, 15:52
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 12.12.2012 
					
					
					
						Сообщений: 1,398
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Не совсем. На странице представлены 2 версии документа. text1 текст данного поля из более старой версии, text2 - соответственно более новой. Необходимо цветом выделить изменения в обоих документах. И в старом и в новом. Чтобы оператор при работе с ними не искал читая одинаковые документы. 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				27.08.2013, 15:54
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 12.12.2012 
					
					
					
						Сообщений: 1,398
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 У документов есть поля для редактирования, так что функция не должна быть рассчитана на обработку больших количеств текста за 1 заход. 
 
Оптимизация и скорость работы тоже не волнует, т.к. Функция запускается однократно при загрузке страницы. 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				27.08.2013, 15:59
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 22.06.2012 
					
					
					
						Сообщений: 168
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Например, для 
var text1 = "Мама мыла очень кривую раму";
var text2 = "Мама долго мыла кривую раму";
 
какие слова нужно вывести?  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				27.08.2013, 16:07
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 12.12.2012 
					
					
					
						Сообщений: 1,398
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Demath, 
 Для данных текстов:
 
text1 = "Мама мыла <span class='changedText'>очень</span> кривую раму"
text2 = "Мама <span class='changedText'>долго</span> мыла кривую раму"
 
И из первого исчезло "очень", мы его выделяем, а во втором добавилось "долго", его мы тоже выделяем.
 
Удивительно, но скрипт выше правильно отрабатывает данные тексты      
По идее, если бы тексты были такие: 
 
var text1 = "Мама мыла кривую раму";
var text2 = "Мама мыла раму";
 
То необходимо было бы в первом тексте выделить "кривую", а второй оставить неизменным.  
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось tsigel, 27.08.2013 в 16:14.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				27.08.2013, 16:23
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 12.12.2012 
					
					
					
						Сообщений: 1,398
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от Demath
			
		
	 | 
 
	
		 
	
 
	| 
		
			Сообщение от tsigel
			
		
	 | 
 
	| 
		И ещё, мой алгоритм не выводит в первом массиве 2 одинаковых слова
	 | 
 
	
 
 А, вообще, почему из первого массива должно что-то выводится?
	 | 
 
	
 
 Есть документ, пользователь может посмотреть изменения этого документа. При просмотре у него на экране 2 версии одного документа, слева старая, справа - новая.
 
	
 
	| 
		
			Сообщение от Demath
			
		
	 | 
 
	
		
	
 
	| 
		
			Сообщение от tsigel
			
		
	 | 
 
	| 
		Есть 2 текста, по идее эти тексты должны не сильно отличаться друг от друга. Задача найти изменения в этом тексте и выделить цветом.
	 | 
 
	
 
 "в этом тексте" - в каком именно: в 1-ом или 2-ом или в обоих сразу?
	 | 
 
	
 
 Изменения надо подсвечивать в 2х документах.  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				27.08.2013, 16:24
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 12.12.2012 
					
					
					
						Сообщений: 1,398
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Прошу прощения если непонятно объясняю. 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				27.08.2013, 16:26
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 22.06.2012 
					
					
					
						Сообщений: 168
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Почитайте перед сном  симметрическая разность   
function DiffArrays(A,B)
{
    var M = A.length, N = B.length, C = [];
    for (var i=0; i<M; i++)
     { var j = 0;
       while (B[j]!==A[i] && j<N) j++;
       if (j==N) C[C.length] = A[i];
     }
   return C;
}
function SymmDiffArrays(A,B)
{
   return DiffArrays(A,B).concat( DiffArrays(B,A) );
}
 
var text1 = "Мама мыла очень кривую раму",
    text2 = "Мама долго мыла кривую раму",
    arr1 = text1.split(' '),
    arr2 = text2.split(' ');
 
alert( SymmDiffArrays(arr1, arr2) );
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				27.08.2013, 16:30
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 12.12.2012 
					
					
					
						Сообщений: 1,398
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Demath, 
 Спасибо за ответ, учу матчасть!    
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 |  
  |