Не менее интересные вещи происходят и с document.getElementsByTagName:
<!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="text/html;charset=UTF-8" />
<title>title</title>
<style type="text/css">img {border: dashed red 1px;width: 10px;height: 10px;display: block;margin: 10px}</style>
</head>
<body>
<script>
document.body.appendChild(document.createElement("img"));
document.body.appendChild(document.createElementNS("http://www.w3.org/1999/xhtml","html:img"));
document.body.appendChild(document.createElementNS("http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd","html:img"));
</script>
<script>
alert(document.getElementsByTagName("img").length);
alert(document.getElementsByTagNameNS("*", "img").length);
</script>
</body>
</html>
IE6: честно показывает одну картинку, сообщает в первом алерте «1», второй даже не показывает.
Fx: показывает три картинки, говорит сначала «1», потом «3».
Op: показывет две картинки, говорит оба раза «3».