Тут всё дело в том, что jsfiddle сам дополняет введённый текст. На самом деле в iframe приходит следующее:
spoiler<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta name="robots" content="noindex, nofollow">
<meta name="googlebot" content="noindex, nofollow">
<meta name="viewport" content="width=device-width, initial-scale=1">
<script type="text/javascript" src="/js/lib/dummy.js"></script>
<link rel="stylesheet" type="text/css" href="/css/result-light.css">
<style type="text/css">
</style>
<title></title>
<script type='text/javascript'>//<![CDATA[
window.onload=function(){
var elem = document.body.children[0].innerHTML;
alert(elem);
}//]]>
</script>
</head>
<body>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<div>Пользователи:</div>
<ul>
<li>Маша</li>
<li>Вовочка</li>
</ul>
<!-- комментарий -->
<script>
// ... ваш код
</script>
</body>
</html>
<script>
// tell the embed parent frame the height of the content
if (window.parent && window.parent.parent){
window.parent.parent.postMessage(["resultsFrame", {
height: document.body.getBoundingClientRect().height,
slug: "gggrope6"
}], "*")
}
</script>
</body>
</html>
Браузер удаляет повторные html, head и body, и первым потомком body (с индексом 0) становится тэг meta.
Вообще, опираться на структуру - не самый надёжный вариант. Небольшое изменение в коде html и надо менять все индексы. Используйте id для уникальных элементов и class для однотипных.