![]() |
|
Модераторы: Sardar, Aliance |
![]()
|
|
| JSman |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 279 Регистрация: 10.7.2006 Репутация: нет Всего: 4 |
Меня интересует только ИЕ.
Проблема в том, что мне нужно получить именно фактический или хотя бы вылидный код страницы средствами JavaScript. Итак, этому мешают: 1) у значений атрибутов, состоящих из одного "слова", пропадают кавычки 2) даже при валидном html коде пропадают закрывающие теги некоторых элементов, например DD, DT. Первая проблема лечится регулярным выражением. Вторая до конца не выяснена. Может быть кто-нибудь знает список закрывающихся тегов, которые удаляются при использовании outerHTML и innerHTML? outerHTML, innerHTML отображают тот код, который браузер отпарсил и хранит в себе. Поэтому обходы через textRange никак не помогут. Добавлено через 2 минуты и 6 секунд Ajax не предлагать. Интересует код странички в динамическом состоянии. |
|||
|
||||
| SelenIT |
|
|||
![]() баг форума ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3996 Регистрация: 17.10.2006 Где: Pale Blue Dot Репутация: 49 Всего: 401 |
Уже давно есть скрипты, преобразующие подобную бяку в XHTML после WYSIWYG-ов, напр. H2X. Насколько помню, оно основано на регулярках, вроде как проверено временем.
Насчет общих правил (кого оно закрывает, а кого нет, и т.п.) сильно сомневаюсь. По-моему, эти правила меняются от версии к версии (напр., IE5 не закрывал LI, кроме последнего в списке, IE6 уже закрывает). Порядок атрибутов в этом коде у разных версий тоже разный. В порядке альтернативы можно было бы вообще отказаться от innerHTML и сериализовать DOM своими силами (рекурсивно обходя коллекции детей каждого элемента и их коллекции атрибутов) - будет гарантированно по тем правилам, какие нужно, но ооочееень мееедлеееннооо... -------------------- Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму! |
|||
|
||||
| JSman |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 279 Регистрация: 10.7.2006 Репутация: нет Всего: 4 |
SelenIT, спасибо!
Время надо померить обязательно
ставим $time(), где хотим поставить отметку аргумент к $time() - это комментарий результаты содержатся в $timeArray Что я нашел быстрое, напишу сюда (хотя все равно исправлять все придется там). А если присоединитесь к поиску решения проблемы, то замечательно будет) Это сообщение отредактировал(а) JSman - 24.7.2008, 11:36 |
|||
|
||||
| JSman |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 279 Регистрация: 10.7.2006 Репутация: нет Всего: 4 |
http://html2xhtml.richarea.com/ - есть реальные ошибки интерпретации.
беру для проверки этот документ http://www.w3.org/TR/2001/CR-css3-selectors-20011113/ |
|||
|
||||
| JSman |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 279 Регистрация: 10.7.2006 Репутация: нет Всего: 4 |
теперь остается добавить закрывающие теги к блочным элементам... |
|||
|
||||
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 78 Всего: 317 |
Если doctype прописать и убедиться что браузер в Standards Compliant mode, то по идее браузер валидный код выдавать должен. Старых IE нет, проверить не могу.
-------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
| JSman |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 279 Регистрация: 10.7.2006 Репутация: нет Всего: 4 |
IE6/7 при
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> javascript:alert(document.compatMode) выдает CSS1Compat, но при этом проблема не решается, в отличии от Оперы, например. Итак, тогда остаются регулярные или серверный компонент писать и связываться по аяксу. Sardar, у тебя другие результаты по стандартам? |
|||
|
||||
| SelenIT |
|
|||
![]() баг форума ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3996 Регистрация: 17.10.2006 Где: Pale Blue Dot Репутация: 49 Всего: 401 |
В HTML это допустимо (закрывающий тег для них помечен как опциональный) и не нарушает валидности. А XHTML IE любых версий, к сожалению, просто не знает... -------------------- Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму! |
|||
|
||||
| JSman |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 279 Регистрация: 10.7.2006 Репутация: нет Всего: 4 |
Действительно, зашел на msdn и увидел потрясающий блог о том, что поддержка xhtml, <?xml> для версий 6 и 7 была специально не реализована. Объясняется это тем, что в подключение DTD с других доменов угрожает безопасности. При всем этом, получение валидного xhtml кода из html возможно с нормальной скоростью конвертирования и на JavaScript. Вот полный список, обнаруженных мною, проблем, связанных с конвертированием: 1. optionalEndingTags = /body|colgroup|dd|dt|head|html|li|option|p|tbody|td|tfoot|th|thead|tr/ - обращаем на них внимание 2. обязательное присутствие tbody в табличках 3. attributes = /noshade|checked|selected|multiple|nowrap|disabled/ 4. li, кроме последнего, не закрываются в любом случае 5. кавычки значений атрибутов Самое лучшее, что я могу предложить это: 1. Создавать валидный xhtml код - это позволит отобразить большинство закрывающих необязательных тегов 2. Обязательно включать в таблицы тег tbody 3. Кавычки исправить code = code.replace(/(=)([^ "'>]+)/ig,'$1"$2"'); 4. code = code.replace(/(<[^>]+)(noshade|checked|selected|multiple|nowrap|disabled)([^=])/ig, '$1$2="$2"$3'); 5. code = code.replace(/<(?:area|base|basefont|br|col|frame|hr|img|input|isindex|link|meta|param)[^>]*/ig,'$& /') 6. закрыть, опять же регулярными выражениями, теги li. Таким образом, 4х регулярных выражений вполне достаточно для решения этой задачи. Если есть дополнения, буду рад замечаниям. |
|||
|
||||
![]()
|
| Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | JavaScript: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |