javascript DOMParser解析文档而不是字符串

时间:2012-03-30 17:11:38

标签: javascript string domparser

我在网上和StackOverflow上搜索过,但没有发现任何类似我的问题。

我有以下HTML字符串:

var txtBoxForm = '<script src="http://ADDRESS"></script><noscript><a href="http://ADDRESS" target="_blank"><img src="http://ADDRESS" border=0 width=728 height=90></a></noscript>';

我试图用以下方法解析它:

parser = new DOMParser()
xmlDoc = parser.parseFromString(txtBoxForm, "text/xml");
alert(xmlDoc);
alert(xmlDoc.firstChild.nodeName);
alert(xmlDoc.firstChild.firstChild.nodeName);
alert(xmlDoc.firstChild.firstChild.firstChild.nodeName);
alert(xmlDoc.firstChild.firstChild.firstChild.firstChild.nodeName);

问题在于,即使字符串以标记开头且没有子节点,我也会从警报中获得以下回复:

alert(xmlDoc);   ->   [Object document]
alert(xmlDoc.firstChild.nodeName);    ->    html
alert(xmlDoc.firstChild.firstChild.nodeName);    ->    body
alert(xmlDoc.firstChild.firstChild.firstChild.nodeName);    ->    parseerror
alert(xmlDoc.firstChild.firstChild.firstChild.firstChild.nodeName);   ->    h3

所以我的问题是:

  1. 为什么解析后的代码不会以<script>开头,因为 字符串呢?
  2. 我做错了什么?
  3. 我怎样才能正确解析该字符串代码?我的目的是从脚本中捕获src 和img标签。
  4. 请帮忙。 感谢。

2 个答案:

答案 0 :(得分:2)

似乎您无法将脚本标记传递给DOMParser以及其他一些问题。

  • XML doc必须有一个根元素(我用<doc></doc>包裹你的代码)
  • 不允许使用脚本(我将其更改为<scripto>
  • 您必须引用您的属性

http://jsfiddle.net/mendesjuan/aVQaP/4/

var txtBoxForm =
  '<doc>'+
    '<scripto src="http://ADDRESS"></scripto>'+
    '<noscript>' + 
      '<a href="http://ADDRESS" target="_blank">'+
        '<img src="http://ADDRESS" border="0" width="728" height="90" />'+
      '</a></noscript></doc>';

var parser = new DOMParser();
var xmlDoc = parser.parseFromString(txtBoxForm, "text/xml");

// outputs http://ADDRESS
console.log( xmlDoc.getElementsByTagName("scripto")[0].getAttribute("src") );
// outputs http://ADDRESS
console.log( xmlDoc.getElementsByTagName("img")[0].getAttribute("src") );​

答案 1 :(得分:0)

您要解析的字符串格式不正确。如果您使用简单的字符串尝试脚本,例如“<div><p>test</p></div>”,它按预期解析元素。

我假设,安全策略不允许,抓取这样的脚本标签,以防止脚本加载操作等。

关于使用正则表达式,下面提供了您可能期望的字符串中两个属性的src值。

<script type ="text/javascript" language="javascript">
<!--
var txtBoxForm = '<div><script src="http://ADDRESS"></script><noscript><a href="http://ADDRESS" target="_blank"><img src="http://ADDRESS" border=0 width=728 height=90></a></noscript></div>';
var exp = /src="([^"]*)"/i;
console.log(exp.exec(txtBoxForm));

-->
</script>