XSLT ломает jQuery / Prototype Script в Firefox - PullRequest
1 голос
/ 22 августа 2010

Я работаю над школьным проектом.Это интернет-страница с XML / XSLT.Для дизайна мы подумали об эффекте выцветания изображения в фоновом режиме.

Я сделал это, как вы можете видеть, и он отлично работает на IE7.Но проверка этого в FF 3.6 приводит к появлению некоторых подозрительных ошибок в firebug и не работает.

Например:

alert($('menu_bg').innerHTML);  

работает при использовании с готовым / наблюдаемым документом.Но ничего из этого не работает:

$('#menu_dots').append("content"); // jQuery
$('menu_dots').insert("content");  // prototype

Дело в том, что я не понимаю, почему все работает без XSLT в обоих браузерах.Но когда я делаю то же самое с XSLT, он ломается в FF.

http://nak.erline.eu/index.xml

тот же домен /js/_script.js

Я думал, что проблема основана на jQuery,вот почему я начал переводить его на прототип.На полпути я понял, что проблема все еще возникает.Вот почему код все еще с jQuery (прокомментирован) и Prototype.

У вас есть идея?

Ответы [ 2 ]

2 голосов
/ 22 августа 2010

Вверху вашего файла XSLT измените:

<xsl:output method="xml" indent="yes" 
    doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
    doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" />

до

<xsl:output method="html" indent="yes" 
    doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
    doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" />

Обратите внимание, что тип метода вывода должен быть html вместо xml . Это исправило проблему в моих тестах.

Я нашел подсказку к ответу: Почему мой простой строгий XHTML-файл выдает ошибки при включении jquery?

Также в моем тесте я удалил следующие ссылки на скрипты

<script src="src/scriptaculous.js" type="text/javascript"/>
<script type="text/javascript" src="js/_script.js"/>

и добавлена ​​ссылка на jQuery

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script>

и протестировано с вашим фрагментом кода jQuery.

<script>
    $(document).ready(function(){
        $('#menu_dots').append("content");
    });
</script>
1 голос
/ 22 августа 2010

Если вам приходится работать с XSLT, HTML DOM, XML и кросс-браузерными функциями, я настоятельно рекомендую Sarissa . Это значительно упростит работу с жестким и несовместимым DOM ActiveX от Microsoft и всеми другими DOM на основе W3C.

Проблема, с которой вы (вероятно, необязательно) сталкиваетесь, заключается в том, что полученные объекты DOM не принадлежат к тому же исходному XML-документу, что является поведением DOM по умолчанию. В результате jQuery или Prototype не могут найти новые элементы. Одним из обходных путей является вставка их в виде текста и повторный анализ, но это дорого. Есть и другие обходные пути, но проще всего, наверное, взглянуть на Сариссу и научиться ею пользоваться. Это не сложно и делает ваш код более читабельным. Вы обнаружите, что Сарисса заботится об этих и других тонкостях, поэтому вы можете беспокоиться о более важных вещах ..

...