Получение jQuery для работы с другой библиотекой (разбор XML) - PullRequest
1 голос
/ 07 августа 2010

Мы используем jQuery для генерации фрагмента XML, а затем преобразуем его в строку с помощью функции html().Но, как мы только что узнали, и если кто-то не знает, функция JavaScript html(), реализованная в IE, не работает, не работает.По сути, он использует некоторые теги с заглавной буквы, «услужливо» (в нашем случае) добавляет атрибуты другим и, как правило, не делает правильных действий.

Я хотел бы использовать что-то подобное для генерации строки XMLвместо этого:

http://www.stainlessvision.com/jquery-html-vs-innerxhtml

Однако эта библиотека не будет хорошо работать с jQuery из коробки, например:

var $dummyRoot = $('<dummyroot/>'); // since html() doesn't generate the outer element
var $foo = $('<foo></foo>');
var $font = $('<font ></font >');
$foo.append($font);
$dummyRoot.append($foo);
var $s = innerXHTML($dummyRoot); // <-- Doesn't work

Я думаю, что она хочет большеW3C DOM-ish объект.

Как мне заставить jQuery общаться с этой innerXHTML() функцией;или, альтернативно, есть ли другая функция, которую я могу использовать (может быть, что-то встроенное в jQuery или плагин jQuery)? *

Редактировать: Следить за вопросом DDaviesBrackett.У меня также есть элемент "body" в моем XML;Посмотрите, как он воспринимает стилизацию CSS (а не просто элемент).

Существует ли неписанное правило не генерировать XML внутри DOM, элементы которого имеют имена, такие как body, font, head и т. д .?

var $dummyRoot = $('<dummyroot/>');
var $foo = $('<foo></foo>');
var $body = $('<body></body>');
var $font = $('<font></font>');
$body.append($font);
$foo.append($body);
$dummyRoot.append($foo);

var $s = innerXHTML($dummyRoot[0]);

// $s equals "<foo><body bottommargin="15" leftmargin="10" rightmargin="10" topmargin="15"><font size="+0"></font></body></foo>"

Ответы [ 2 ]

1 голос
/ 07 августа 2010

объект jQuery оборачивает свое содержимое, но предоставляет его через индексатор массива. Что вы получаете, когда используете

var $s = innerXHTML($dummyRoot[0]);

вместо вашего примера?

0 голосов
/ 07 августа 2010

Существует ли неписанное правило, чтобы не генерировать XML внутри DOM, чьи элементы имеют имена, такие как body, font, head и т. Д.

jQuery использует свойство innerHTML для анализа данного фрагмента текста и построения из него DOM . Он никогда не предназначался для анализа или генерации XML, поскольку конфликтующие имена могут дать совершенно непредсказуемые результаты в зависимости от того, как их видит браузер.

См

Я дал аналогичный ответ для генерации правильного XML за меньшее количество шагов с использованием рекурсивного подхода. Чтобы создать следующий XML:

<foo>
    <body>
        <font></font>
    </body>
</foo>

вы бы написали:

Σ('foo', 
    Σ('body', 
        Σ('font', '')
    )
);

Σ выглядит круче, но вы можете изменить имя функции на любое другое:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...