无法在XMLdom中使用querySelectorAll显示js脚本

时间:2015-11-06 00:32:44

标签: javascript internet-explorer

所以我一直在搜索,尝试了一切,但仍然,我的脚本没有在IE中显示!任何版本!它显示在FF和Chrome精美,但即AAAAAARGH !!我将文档类型更改为<!DOCTYPE html>,我将<meta http-equiv="X-UA-Compatible" content="IE=edge" />标记添加到我的头部,检查我的浏览器是否处于怪癖模式,或者是compat模式,只是在标准模式下运行,删除了我的Cookie ,历史和重置我的设置,检查我的安全设置,仍然没有!我还缺少什么?我正在寻找那个&#34;缺少链接&#34;这将最终在ie中显示我的脚本。任何想法或帮助将不胜感激。 情况:我正在使用html模板来显示和使用js的XML文件。

JS:

var xmlhttp, xmlDoc, y
var xmlhttp = new XMLHttpRequest();
if (window.XMLHttpRequest) 
{
xmlhttp = new XMLHttpRequest(); // code for IE7+, Firefox, Chrome, Opera, Safari
}
else if (window.ActiveXObject)  
{
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); // code for IE6, IE5
 }
xmlhttp.open("GET", "/localfile/xmlfilename.xml", false);
xmlhttp.send();

var xmlDoc = xmlhttp.responseXML;
var y = xmlDoc.querySelectorAll(".class1, .class2");    

document.write("<ul id='feed' data-role='listview' data-inset='true'>");
for (i=0;i<y.length;i++)
  {     
    document.write("<li><strong>"+y[i].getElementsByTagName("title")[0].childNodes[0].nodeValue+"</strong><br>"+y[i].getElementsByTagName("pubDate")[0].childNodes[0].nodeValue+"<br>"+y[i].getElementsByTagName("description")[0].childNodes[0].nodeValue+"</li>");
  }
document.write("</ul>"); 

XML:

<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">

  <channel>

    <item class="class1">
    <title>Update's Title</title>
    <pubDate>28 Oct 2015</pubDate>
    <description><![CDATA[Whatever the update is with some <a href="/link/file.htm">links</a>.]]></description>
    </item>

    <item class="class2">
      <title>Another Update Title</title>
      <pubDate>1 Oct 2015</pubDate>            
      <description><![CDATA[Some more <a href="/link/file2.htm#anchor">html tags</a> in the !cdata.]]></description>
    </item>
</channel>

</rss>

就像我说的,我使用的是html模板并使用js来渲染我的XML数据。它在Chrome和FF中显示非常好,但不是在5+或边缘。这一切的美妙之处在于我在任何一个浏览器中都没有出现任何错误,除了FF和Chrome中的Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check http://xhr.spec.whatwg.org/,并且没有错误。我知道JQuery有一些很酷的方法,但宁愿坚持使用js来显示我的内容。抱歉沮丧,但是我做错了吗?

3 个答案:

答案 0 :(得分:0)

首先,尝试使用jQuery做ajax。 如果它有效,你就会知道问题是ajax代码......

答案 1 :(得分:0)

在重新检查我的ajax后,当我阅读有关XMLDocument对象的文章时,我正在为getElementsByClassName和querySelectorAll搜索替代方法:http://help.dottoro.com/ljbcjfot.php&amp;读到ie既不支持也不支持。呃,第三次必须重新编写脚本,但是使用jQuery。有意义的是,即错误控制台一直告诉我不支持querySelectorAll方法。 滚动眼睛感谢Guilherme的帮助。

答案 2 :(得分:0)

最终找到答案!!当我加载整个xml文档时,我的ajax运行良好。但是,当我添加参数以进行过滤并仅显示具有特定类而不是整个文档的xml节点时,getElementsbyClassNamequerySelectorAll无法工作,并且稍后读取即不支持ie ne版本:http://help.dottoro.com/ljbcjfot.php。我研究了很长时间尝试新的解决方案,以及js中的所有内容。我接受了你的建议,使用jquery上传我的文档并开始使用参数&amp;方法只显示具有特定类的节点,并且它是跨浏览器兼容的。如果有人需要它:

jquery代码

<head>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.js"></script>
</head>
        <body>
        <ul id="feed"></ul>
        <script>
        $.ajax({
            type:       'GET',
            url:        '/file/rssfeed.xml',
            dataType:   'xml',
            success:    function(xml){
                $(xml).find("item.class1, item.class2").each(function(){            
                var title = $(this).find('title').text();
                var date = $(this).find('pubDate').text();
                var description = $(this).find('description').text();
                $('#feed').append('<li><strong>'+title+'</strong><br>'+date+'<br>'+description+'</li>');            
                });     
                }
            });
        </script>
    </body>

我在html中添加了ul标记id="feed"li s已针对每个帖子落实到位。最初,我使用js上传xml文档并显示html模板中的所有节点,但必须使用jquery过滤并仅显示具有单独类(item.class1, item.class2)的xml节点。没有参数的原始js / ajax脚本是跨浏览器兼容的,我现在使用的jquery脚本,过滤器和显示在Chrome,FF&amp; IE浏览器!好极了!!拿那个就是!!