.xhtml扩展名

今天在研究手机开发时的javascript应用时,不经意间发现了个小问题,现来看一下这两个文件:

a.xhtml

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
<title>1</title>
<script type="text/javascript">
window.onload = function()
{
var pp = document.documentElement.childNodes;
for (p in pp)
{
alert(pp[p]);
}
}
</script>
</head>
<body>
</body>
</html>

b.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
<title>1</title>
<script type="text/javascript">
window.onload = function()
{
var pp = document.documentElement.childNodes;
for (p in pp)
{
alert(pp[p]);
}
}
</script>
</head>
<body>
</body>
</html>

发现两个文件的不同之处了吗?其实上面两个文件是完全一样的,除了扩展名。

由于要做手机开发,有人建议说用.xhtml这个扩展名更好一些,于是就用了。本想用js得到body这个节点,结果试了几次pp[0]都不对。

我用的是XHTML-MP 1.2的DOCTYPE,难道DOCTYPE不对?好,换成标准的xhtml的DOCTYPE,就是a.xhtml这样的,还是不对啊!

难道js代码写的有问题?(这里有段小插曲,在下篇文章详述)百度一下,再翻出以前写的看看,没问题啊!还有哪儿不对呢?

按网上和我以前的经验来说,pp[0]是<head>,pp[1]是<body>才正对呀!不管了,先把pp都alert出来看看是啥东西再说。这一alert发现问题了,多出三个[object Text],分别位于<head>前面,<head>和<body>之间,<body>之后。这种情况,甭问肯定是换行符所致,删掉,果然没问题了。

记得以前没出现这种情况,那可能就是扩展名的问题了,另存为b.html,再试,没问题了,这才恍然大悟,怪不得年前看过一个手机页面,一个换行符也没有。

来个刨根问底,查查这个.xhtml到底咋回事,百度了半天,没找到,google了半天,好像(为什么加个好像呢?答案看我2月12号的饭否)也没找到。

哪位有缘人路过提点提点,期待ing!!!

发表评论?

2 条评论。

  1. 解析XHTML时可能会按XML的规范来解析,一个换行符算是一个文本节点(text node),你可以试试在Firefox下解析XML和在IE下解析XML,你可以看到两者的差别。

  2. 恩,我也这么觉得,所以想看看当初制定.xhtml这个扩展名的组织或人,难道是w3c?不过没找到,呵呵。

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>