Программирование => JavaScript & JScript => Тема начата: .:cRaw:. от 23 Июля 2003, 14:56:09
Название: MSO.Word.HTML.CleanUp
Отправлено: .:cRaw:. от 23 Июля 2003, 14:56:09
Я не супер-знаток javascript, мне ближе vbscript, поэтому функцию я написал на vbscript, а потом уже переводил в javascript? но не без проблем... vb-шная отрабатывает как надо, а та, что на js отрабатывает както странно... требуемый результат достигается только после нескольких исполнений, вместо одного! в чем ошибка, кто подскажет? вариант на vbscript:
Название: MSO.Word.HTML.CleanUp
Отправлено: .:cRaw:. от 23 Июля 2003, 17:41:52
неа... я попробовал... нифига, как минимум приходится трижды пройтись по грязному html, чтобы получить то, что нужно...
mike, возьми какой-нибудь *.doc, чтобы в нем было форматирование разное... и bold и italic и таблицы и выделение цветом и пр. скопируй из word-а текст и вставь в div. у меня для полной очистки требуется трижды нажать на "Сlean Up HTML".
я алертами все облепил, для проверки и получилось, что он просто перепрыгивает иногда через некоторые ноды, вот это мне и не понятно... (
Название: MSO.Word.HTML.CleanUp
Отправлено: mike от 23 Июля 2003, 17:50:34
Цитировать
.:cRaw:.: mike, возьми какой-нибудь *.doc,
Ну так я на доке и проверял :) VB и JS дают одинаковые результаты.
Название: MSO.Word.HTML.CleanUp
Отправлено: mike от 23 Июля 2003, 17:56:26
Хотя таки да, все зависит от файла... :(
Название: MSO.Word.HTML.CleanUp
Отправлено: mike от 23 Июля 2003, 18:03:56
А!!! Вспомнил! :)) У меня уже было такое. Во внешнем цикле nodes.length - переменная величина, равно как и во внутреннем - attributes.length. И если ты удаляешь какой-нибудь нод, на его место становится следующий, который пропускается, т.к. счетчик увеличивается. Вот рабочий код (по крайней мере те примеры, что прежний не брал, этот берет):
Название: MSO.Word.HTML.CleanUp
Отправлено: .:cRaw:. от 23 Июля 2003, 18:05:48
попробуй с этим файлом: http//:http://www.proga.ru/test.doc у меня не вычищаются на нем style и class для некоторых тэгов P. может стоит сделать по аналогии и вынести отдельно cleanup_attribute? :))
еще вопрос. а есть мысли, почему такое происходит?
Название: MSO.Word.HTML.CleanUp
Отправлено: mike от 23 Июля 2003, 18:10:48
Цитировать
.:cRaw:.: попробуй с этим файлом:
Ха! Новый код чистит. ;)
Название: MSO.Word.HTML.CleanUp
Отправлено: .:cRaw:. от 23 Июля 2003, 18:13:57
во! тепрь все рулит! спасибо :)) :super:
тестовый файлик прибиваю...
теперь кстати можно снова вернуться к варианту просто с функцией cleanup() без cleanup_node(), что я уже сделал ))
Название: MSO.Word.HTML.CleanUp
Отправлено: Wyclef от 24 Июля 2003, 00:52:24
.:cRaw:. mike
:appl:
Просто - песня!
Название: MSO.Word.HTML.CleanUp
Отправлено: dub от 24 Июля 2003, 01:44:18
Цитировать
mike: А!!! Вспомнил! ) У меня уже было такое. Во внешнем цикле nodes.length - переменная величина, равно как и во внутреннем - attributes.length. И если ты удаляешь какой-нибудь нод, на его место становится следующий, который пропускается, т.к. счетчик увеличивается.
Помню, было (http://forums.webscript.ru/showthread.php?s=&threadid=11023) . Помог тогда очень. До сих пор тебя вспоминаю, когда циклы с удалением пишу :)
.:cRaw:. кинь свой тест.док, когда не лень, или по ссылке восстанови, хотел на нем свою функцию опробовать. В ней, по сути, все то же, только еще задаются замены для некоторых тегов (\'B\' -> \'STRONG\', например), а разрешенные атрибуты задаются отдельно для каждого тега (например, для \'TD\' разрешены \'align\', \'vAlign\', \'colSpan\', \'rowSpan\', а для \'U\' - ничего).
Название: MSO.Word.HTML.CleanUp
Отправлено: .:cRaw:. от 24 Июля 2003, 12:44:14
dub да там просто так текст от фонаря набран в несколько параграфов, разными шрифтами и разным цветом текста и фона, еще гдето жирный, гдето наклонный, можно еще такблицу всунуть... короче такой документ за 20 секунд слепить можно )) главное, чтобы разнородного форматирования было побольше! я делал даже так: брал раельный очень большой doc-файл, копировал из него страниц 50 текста (с довольно сложным форматированием) и пробовал этой функцией расчистить. скажу одно, времени у IE на рендеринг вставляемого текста уходит раз в 10 больше, чем потом на его расчистку.
Цитировать
dub: задаются замены для некоторых тегов (\'B\' -> \'STRONG\', например), а разрешенные атрибуты задаются отдельно для каждого тега (например, для \'TD\' разрешены \'align\', \'vAlign\', \'colSpan\', \'rowSpan\', а для \'U\' - ничего)
ну... как говорится, хозяин - барин, это дело вкуса ))
Название: MSO.Word.HTML.CleanUp
Отправлено: .:cRaw:. от 24 Июля 2003, 15:03:15
и еще в догонку... а как бы это все прикрутить к onpaste? clipboardData.gatData не прокатывает (( тут на форуме помоему както проскакивал уже вариант примерно с такойже функцией, но я чтото сейчас не нашел...
Название: MSO.Word.HTML.CleanUp
Отправлено: mike от 24 Июля 2003, 15:35:19
Название: MSO.Word.HTML.CleanUp
Отправлено: .:cRaw:. от 24 Июля 2003, 15:53:09
этот вариант из MSDN я уже пробовал, но метод getData возвращает текст без форматирования :(
Название: MSO.Word.HTML.CleanUp
Отправлено: dub от 24 Июля 2003, 20:03:57
.:cRaw:. а куда ты его paste? Если в div (contentEditable=true), то, видимо, тот пример, который ты имел в виду, здесь (http://forums.webscript.ru/showthread.php?s=&threadid=9508&perpage=15&pagenumber=2). А вот насчет подобной привязки к paste в iframe (http://forums.webscript.ru/showthread.php?s=&threadid=11151) мне так никто ничего путного и не сказал. Если что - буду очень признателен.
Название: MSO.Word.HTML.CleanUp
Отправлено: dub от 24 Июля 2003, 20:09:58
И тоже вдогонку. Как бы на время выполнения очистки чем-нибудь занять пользователя? У меня почему-то получается, что если я перед выполнением пытаюсь, например, изменить document.body.style.cursor на \'wait\', то фактически получается, что на \'wait\' курсор заменяется только после того, как заканчивается очистка. С чем это может быть связано? Может быть с тем, что у меня очистка происходит именно в iframe, то есть с перемещением фокуса (хотя тоже странно, если я пытаюсь жестко заменить, например, содержание DIVа с комментариями, то и оно меняется только после выполнения очистки)? Или?