Разбор неверного HTML с помощью jQuery, без добавления в DOM? - PullRequest
5 голосов
/ 28 июня 2011

Я работаю над плагином jQuery, который использует шаблон HTML.Конечные пользователи могут передать шаблон, который выглядит на простейшем уровне, подобном следующему:

<template>
   <img src="/images/image_{field_id}.gif">
</template>

Шаблон должен быть закомментирован, чтобы браузер не пытался что-либо отображать. Мой код просто извлекаетвнутренняя часть комментария как текст, а затем использует jQuery для анализа его в дереве элементов.Затем я делаю конкретные замены.

Я помню, что читал, что jQuery просто использует DOM для разбора HTML, например, когда вы просто делаете

var x = $(html_string);

jQuery фактически просто добавляет его в DOM для получения элементов.Приведенное выше простое действие ничего не отобразит (пока я фактически не добавлю x где-нибудь в DOM), но все же этот код приводит к тому, что браузер пытается загрузить целевое изображение - , даже если я никогда не добавлю его в DOM. Вот простая демонстрация этого эффекта в действии: http://jsfiddle.net/b5HGU/

Итак, в принципе - есть ли способ решить эту проблему?Можете ли вы создать элемент «image» с известным плохим тегом src, используя jQuery, но не загружайте ли он изображение до тех пор, пока вы действительно не добавите его в реальный DOM?весь синтаксический анализ шаблона в виде строки до с использованием jQuery для создания DOM.Это, конечно, выполнимо, но на самом деле шаблон имеет ряд различных компонентов, и очень удобно использовать селекторы jQuery, чтобы превратить его в дерево навигации, прежде чем выводить проанализированную версию.В противном случае мне пришлось бы написать собственный синтаксический анализатор XML.Просто интересно, есть ли какие-нибудь простые решения, прежде чем я сделаю это трудным путем.

Ответы [ 2 ]

3 голосов
/ 28 июня 2011

Попробуйте позвонить $.parseXML, который должен воспринимать его как необработанную разметку, ничего не интерпретируя.

Я подозреваю, что он должен быть корректным.

0 голосов
/ 22 июня 2016

Это очень старая ветка, но у меня сегодня такая же проблема.Я нашел какое-то решение для этого - анализ html с помощью jquery без загрузки всех этих ресурсов, изображений и т. Д. Это не самое элегантное решение, но оно все равно работает.

var parser = new DOMParser();
//i assume your html-string is in resp variable
var doc = parser.parseFromString(resp, "text/html");
// here just css-select your element with standard method
var div = doc.querySelectorAll('#mydiv');
// then you can wrap this element with jquery and do what you want
var $div = $(div);

Надеюсь, это поможет.

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