Разбор IMG-тегов Javascript с использованием InnerHTML - PullRequest
2 голосов
/ 07 января 2012

Вот дилемма:

Я делаю эффект JavaScript.Для этого я тяну узел и его детей (включая изображения) с .innerHTML.Затем пытаюсь разобрать его через DOM.Когда он попадает в теги изображения, он выдает ошибку разбора.Когда я предупреждаю innerHTML, я вижу, что он удаляет закрытие для тегов IMG.

Я не уверен, что проблема в парсере или innerHTML.Как я могу взять этот узел, захватить внутреннее содержимое, проанализировать его как XML?

Похоже, что подобное происходило здесь: innerHTML удаление закрывающей косой черты из тега изображения

(Это единственная страница в Интернете, которая, как я обнаружил, затрагивает эту проблему после почти двух дней поиска.)

Вот код разбора, который я использую:

function loadXMLString(txt) {
    if (window.DOMParser) {
        parser=new DOMParser();
        xmlDoc=parser.parseFromString(txt,"text/xml");
    } else { // Internet Explorer
        xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.async="false";
        xmlDoc.loadXML(txt); 
    }
    return xmlDoc;
}

разрешение было изменить тип MIME, но как это сделать с парсером javascript (как MS ActiveX, так и стандарт другого браузера)?Какой MIME я должен использовать?

Вот элемент DOM, который я пытаюсь проанализировать:

<div style="display:none" id="ItemsContainer" name="ItemsContainer">
    <SPAN>
       <a href="url1"><img src="1.jpg" alt="alt1" /></a>
       <a href="url2"><img src="2.jpg" alt="alt2" /></a>
       <a href="url3"><img src="3.png" alt="alt3" /></a>
       <a href="url4"><img src="4.jpg" alt="alt4" /></a>
    </SPAN>
</div>

Если я изменю теги на другое имя, как это работает.Кажется, что innerHTML нарушает тег или синтаксический анализатор не может анализировать теги IMG.

Пожалуйста, сообщите.Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 09 января 2012

IE автоматически использует заглавные буквы (так становится), поэтому я использовал txt.replace(/><\/a>/g, " /></a>").replace(/><\/A>/g, " /></A>")

Спасибо всем, кто помог!

0 голосов
/ 07 января 2012

Я предполагаю, что вы получаете переменную "txt" с помощью innerHTML? Я проверял это в различных браузерах, и он действительно удаляет конечный тег. Возможно, перед отправкой в ​​функцию loadXMLString вы могли бы добавить их обратно с помощью регулярных выражений?

var re = new RegExp("(<img\b[^>]*)>", "g");
txt = txt.replace(re, "$1 />");
...