pythonic
предлагает zip
вдоль некоторых других подобных питону функций:
import {zip} from 'pythonic';
const arr1 = ['a', 'b'];
const arr2 = ['c', 'd', 'e'];
for (const [first, second] of zip(arr1, arr2))
console.log(`first: ${first}, second: ${second}`);
// first: a, second: c
// first: b, second: d
Существует другой хороший прием, который можно использовать для значительного улучшения вида представленного различного HTML. Хотя это не полностью решает начальную проблему, это будет иметь значительное значение в появлении Вашего представленного HTML diffs.
Бок о бок представленный HTML сделает очень трудным для Вашей разности выстроиться в линию вертикально. Выравнивание по вертикали крайне важно для сравнения бок о бок diffs. Для улучшения выравнивания по вертикали бок о бок разность, можно вставить невидимые элементы HTML в каждую версию разности в "контрольных точках", где разность должна быть вертикально выровненная. Тогда можно использовать немного клиентского JavaScript для добавления пространства по вертикали вокруг контрольной точки, пока стороны не выстраиваются в линию вертикально.
Объясненный в немного большем количестве деталей:
, Если Вы хотите использовать эту технику, выполните свой различный алгоритм и вставьте набор visibility:hidden
<span>
с или крошечный <div>
с везде, где Ваш бок о бок присваивают версию, должен совпасть, согласно различному. Тогда выполните JavaScript, который находит каждую контрольную точку (и ее бок о бок сосед) и добавляет пространство по вертикали к контрольной точке, которая является большой шишкой (более мелкой) на странице. Теперь Ваша представленная разность HTML будет вертикально выровненная до той контрольной точки, и можно продолжить восстанавливать выравнивание по вертикали вниз остальная часть Вашего бок о бок страница.
Я закончил тем, что нуждался в чем-то подобном некоторое время назад. Чтобы заставить HTML выстраивать в линию сторону для запасного пути Вы могли использовать два iFrames, но необходимо будет тогда связать их прокрутку с помощью JavaScript, поскольку Вы прокручиваете (если Вы позволяете прокручивать).
Для наблюдения разности, однако, Вы больше, чем, вероятно, захотите пользоваться чужой библиотекой. Я использовал DaisyDiff, библиотека Java, для подобного проекта, где мой клиент был доволен наблюдением единственного рендеринга HTML содержания с MS Word "изменения дорожки" - как разметка.
HTH
Так, Вы ожидаете
<font face="Arial">Hi Mom</font>
и
<span style="font-family:Arial;">Hi Mom</span>
считаться тем же?
вывод зависит очень от Агента пользователя. Как Ionut Anghelcovici предлагает , сделайте изображение. Сделайте один для каждого браузера, о котором Вы заботитесь.
Рассмотрите использование вывода ссылок или рыси для рендеринга версии только для текста HTML, и затем разности это.
Если это - XHTML (который принимает много с моей стороны), Разность Xml Исправила бы справку Инструментария? http://msdn.microsoft.com/en-us/library/aa302294.aspx
Для меньших различий Вы могли бы быть в состоянии сделать разность обычного текста, и затем проанализировать отсутствие или вставленные части, чтобы видеть, как разрешить его, но для любых больших различий Вы собираетесь очень быть нелегко делать это.
, Например, как Вы обнаружили бы, и шоу, что выровненное по левому краю изображение (плавающий оставленный абзаца текста) внезапно стало выровненным по правому краю?
Если Вы работали с Java и XHTML, , XMLUnit позволяет Вам сравнивать два XML-документа через org.custommonkey.xmlunit. Класс DetailedDiff :
Сравнивает и описывает все различия между двумя XML-документами. Сравнение документа не останавливается, как только первое неисправимое различие найдено, в отличие от Различного класса.
Используя текст отличаются, повредится на нетривиальных документах. В зависимости от то, что Вы думаете, интуитивно, XML отличается, вероятно, генерирует diffs, которые не очень хороши для текста с разметкой. AFAIK, DaisyDiff является единственной библиотекой, специализированной на HTML. Это работает отлично для подмножества HTML.
Я верю хорошему способу сделать, это к , представляют HTML к изображению и затем используют [приблизительно 111] различный инструмент, который может сравнить изображения для определения различий.
Используйте режим разметки Pretty Diff для HTML. Он полностью написан на JavaScript.
А как насчет DaisyDiff (доступны версии Java и PHP ).
Следующие функции действительно хороши:
На выходных я опубликовал новый проект на codeplex, который реализует алгоритм HTML diff на C #. Исходный алгоритм был написан на Ruby. Я понимаю, что вы искали реализацию JavaScript, возможно, наличие такой реализации на C # с исходным кодом может помочь вам перенести алгоритм. Вот ссылка, если вам интересно: htmldiff.codeplex.com . Вы можете прочитать об этом здесь .
ОБНОВЛЕНИЕ: Эта библиотека была перемещена на GitHub .