【问题标题】:Parsing IMG tags Javascript using InnerHTML使用 InnerHTML 解析 IMG 标签 Javascript
【发布时间】:2012-01-06 21:19:14
【问题描述】:

这是两难境地:

我正在做一个 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 和其他浏览器的标准)来做到这一点?我应该使用什么 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 标签。

请指教。 提前致谢!

【问题讨论】:

  • 您是否尝试过使用application/xhtml+xml mime 类型?这将比text/xml 更适合您的文档,因为如果我没记错的话,严格的 xml 需要结束标记。
  • 你考虑过document.getElementById("ItemsContainer").getElementsByTagname("img")
  • mplungjan,我没有。我会考虑的。
  • Diodeus,XML 方法是因为我后来在 javascript 中对它做了什么。我把所有的信息都做成了一些图形和叠加效果。我希望我想将其保留在标准 HTML 中以用于 SEO 目的。马特,如果我这样做,我该如何更改 ActiveX 版本的解析器的 mime-type?
  • 客户端对一些 innerHTML 的处理对 SEO 来说是否有趣 - 蜘蛛需要一个非常聪明的解析器来理解 javascript 操纵的东西

标签: javascript parsing dom image innerhtml


【解决方案1】:

IE 自动将 Tag 名称大写(因此变为 ),所以我使用了 txt.replace(/&gt;&lt;\/a&gt;/g, " /&gt;&lt;/a&gt;").replace(/&gt;&lt;\/A&gt;/g, " /&gt;&lt;/A&gt;")

感谢所有帮助过的人!

【讨论】:

    【解决方案2】:

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

    var re = new RegExp("(<img\b[^>]*)>", "g");
    txt = txt.replace(re, "$1 />");
    
    猜你喜欢
    • 2012-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-03
    • 1970-01-01
    • 1970-01-01
    • 2016-08-14
    相关资源
    最近更新 更多