我通过为他做一些网络工作来帮助他。他需要一种简单的方法来更改他网站上的几段文字。我决定提供一个包含消息的 XML 文件,而不是让他编辑 HTML,我使用 jQuery 将它们从文件中拉出并将它们插入到页面中。
它工作得很好...在 Firefox 和 Chrome 中,在 IE7 中不是那么好。我希望你们中的一位能告诉我原因。我做了一个公平但谷歌搜索但找不到我要找的东西。
这是 XML:
<?xml version="1.0" encoding="utf-8" ?>
<messages>
<message type="HeaderMessage">
This message is put up in the header area.
</message>
<message type="FooterMessage">
This message is put in the lower left cell.
</message>
</messages>
这是我的 jQuery 调用:
<script type="text/javascript">
$(document).ready(function() {
$.get('messages.xml', function(d) {
//I have confirmed that it gets to here in IE
//and it has the xml loaded.
//alert(d); gives me a message box with the xml text in it
//alert($(d).find('message')); gives me "[object Object]"
//alert($(d).find('message')[0]); gives me "undefined"
//alert($(d).find('message').Length); gives me "undefined"
$(d).find('message').each(function() {
//But it never gets to here in IE
var $msg = $(this);
var type = $msg.attr("type");
var message = $msg.text();
switch (type) {
case "HeaderMessage":
$("#HeaderMessageDiv").html(message);
break;
case "FooterMessage":
$("#footermessagecell").html(message);
break;
default:
}
});
});
});
</script>
我需要在 IE 中做一些不同的事情吗?基于带有 [object Object] 的消息框,我假设 .find 在 IE 中工作,但由于我无法使用 [0] 索引到数组或检查它的 Length 我猜这意味着 .find 不是返回任何结果。有什么理由可以在 Firefox 和 Chrome 中完美运行但在 IE 中失败?
我是 jQuery 的新手,所以我希望我没有做过一些愚蠢的事情。上面的代码是从论坛中删除的,并根据我的需要进行了修改。由于 jQuery 是跨平台的,我想我不必处理这个烂摊子。
编辑:我发现如果我在 Visual Studio 2008 中加载页面并运行它,那么它将在 IE 中工作。所以结果证明它在通过开发 Web 服务器运行时总是有效的。现在我在想 IE 只是不喜欢在从我的本地驱动器加载的 XML 中执行 .find ,所以也许当它在实际的 Web 服务器上时它会正常工作。
我已经确认从 Web 服务器浏览时它可以正常工作。一定是 IE 的一个特性。我猜这是因为 web 服务器为 xml 数据文件传输设置了 mime 类型,没有那个 IE 不能正确解析 xml。