Алексей Качаев | Web-developer, фрилансер, менеджер

PHP, jQuery, AJAX, CodeIgniter, ZendFramework, Web2.0, блоггинг, Wordpress, бизнес, StartUp, Инветоры, web-проекты, бизнес-идеи, фриланс, интерфейсы

jQuery: автоматическое исправление тегов

Опубликовано: Алексей Качаев |

Сегодня jQuery 1.3.1 и Firefox 3.5 преподнесли мне сюрприз… Даже можно сказать “нагло украли” полчаса времени. Указываю конкретные версии, потому что не успел проверить - случилось бы в другом окружении тоже самое. А было дело так…

Я работал над плагином под WordPress и делал достаточно стандартные элементы ajax-интерфейса. Замялся над такой штукой (схематически):

1) ajax-запросом подгружаю на страницу список .tpl  файлов из определенной папки и их содержимое,

2) названия этих файлов показываю списком ссылок, а контент расставляю в невидимые слои,

3) при клике на ссылку с именем файла, его содержимое переносится из невидимого слоя в textarea для редактирования следующим образом:

$(’textarea[name=my_textarea]‘).attr(’value’, $(’#my_div’).html());

И все было нормально, пока… Пока я не начал тестировать систему на реальных файлах. А реальные файлы представляли из себя специальные темплейты парсинга контента, и в одном из них были следующие строки:

<title>

{{title}}

</spl_title>

jQuery принимало и записывало текст файла совершенно нормально, а вот переносило в textarea в таком виде:

<title>

{{title}}

</title>

Такая вот себе система автодетекта “ошибок”. “Несуществующие” с точки зрения html-логики теги, типа </meta> (закрывающий) просто не отображались.

Поразмыслив над случившимся, могу сделать один только вывод: при вызове .html(), jQuery продолжает работать с DOM-деревом, а не точным содержимым блока. Каждый элемент DOM при это идентифицируется по открывающему тегу и закрывает его jQuery так, как считает нужным (чтобы сохранить целостность).

Пришлось переделать немного логику интерфейса… А примерчик в коллекцию поучительных.

Понравился пост? Будь в курсе последних событий: подпишись на RSS-ленту.!

Также читайте по теме:

4 комментария на “jQuery: автоматическое исправление тегов”

  1. И как же вы переделали логику?

  2. 2mihdan:

    Сделал то, чего пытался избежать - дополнительный ajax-запрос. Т.е. при клике на ссылку “Редактировать” система дает ajax-запрос, получает содержимое соответствующего файла и помещает его непосредственно в поле для редактирования.

    Сейчас думаю проверить еще один вариант - сохранять с помощью jQuery-механизма .data().

  3. Можно было бы просто сохранять в строковые переменные javascript навроде:


    var templates = {
    'one.tpl': 'some contents',
    'two.tpl': 'some other contents'
    }

    и тогда не придется плясать с бубном

  4. Тоже вариант

Оставьте комментарий