-1

我在网上和 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);

问题是,即使字符串以 tag 开头并且没有子节点,我也会从警报中得到以下回报:

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. 我怎样才能正确解析该字符串代码?我的意图是从脚本和 img 标签中捕获 src。

请帮忙。谢谢。

4

2 回答 2

3

似乎您无法将脚本标签传递给DOMParser另外一些问题。

  • XML 文档必须有一个根元素(我用 包装了您的代码<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") );​
于 2012-03-30T18:54:04.523 回答
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>
于 2012-03-30T18:48:54.747 回答