Forum Webscript.Ru

Программирование => 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:



вариант на javascript:



выше приведенные варианты можно засунуть для тестирования вот сюда:


Word HTML Cleaner


 




Название: MSO.Word.HTML.CleanUp
Отправлено: mike от 23 Июля 2003, 16:18:30
У меня заработал такой вариант:



Название: 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(), что я уже сделал ))

p.s.: заразливые смайлики кому-нибудь помешают проверить работоспособность ))
Название: MSO.Word.HTML.CleanUp
Отправлено: mike от 23 Июля 2003, 18:30:27
Цитировать
.:cRaw:.:
p.s.: заразливые смайлики кому-нибудь помешают проверить работоспособность ))

Ну теперь все ОК...
Название: 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
Посмотри, здесь есть пример.

http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/objects/clipboarddata.asp
Название: 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а с комментариями, то и оно меняется только после выполнения очистки)? Или?