使用InnerHTML解析IMG标签Javascript

时间:2012-01-06 21:19:15

标签: javascript parsing dom image innerhtml

这就是困境:

我正在做一个javascript效果。为此,我正在使用.innerHTML拉动一个节点和它的子节点(包括图像)。然后尝试通过DOM解析它。当它到达图像标签时,它会抛出一个解析错误。当我提醒innerHTML时,我发现它正在剥离IMG标签的结束。

我不确定问题是解析器还是innerHTML。如何获取此节点,获取内部内容,将其解析为XML?

看起来类似的事情发生在这里:innerHTML removing closing slash from image tag

(这是互联网上唯一一个在搜索了近两天之后触及这个问题的网页。)

这是我正在使用的解析代码:

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和其他浏览器的标准)?我应该使用什么模因?

这是我试图解析的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 个答案:

答案 0 :(得分:1)

IE会自动将标记名称大写(因此变为),因此我使用了txt.replace(/><\/a>/g, " /></a>").replace(/><\/A>/g, " /></A>")

感谢所有帮助过的人!

答案 1 :(得分:0)

我假设您使用innerHTML获取“txt”变量?我在各种浏览器中测试过,它确实剥离了结束标记。也许,在将它发送到函数loadXMLString之前,您可以使用正则表达式将它们添加回来吗?

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