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

javascript DOMParser parsing document not the string

本文关键字:字符串 文档 DOMParser javascript      更新时间:2023-09-26

我在网络和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标签

请帮忙。谢谢

似乎无法将脚本标记传递给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") );​
要解析的字符串格式不正确。如果您尝试使用一个简单的字符串(例如"<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>