В данный момент я читаю новую книгу по HTML5 (HTML5. Webseiten innovativ und zukunftssicher by Peter Kröner).Есть несколько примеров, как научить IE6-8 понимать HTML5.Одна стратегия выглядит следующим образом (если Javascript включен):
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>HTML5 in IE</title>
<script>
'abbr article aside audio canvas details figcaption
figure footer header hgroup mark menu meter nav
output progress section summary time video'
.replace(/\w+/g, function(n) {window.document.createElement(n)});
</script>
</head>
<body>
<section>
<header>
<h1>This is the header</h1>
</header>
<section>
<h2>Chapter 1</h2>
<p>
Text, Text, Text, Text, Text...
Text, Text, Text, Text, Text...
Text, Text, Text, Text, Text...
Text, Text, Text, Text, Text...
</p>
</section>
<footer>
<p>
This is the footer.
</p>
</footer>
</section>
</body>
</html>
Когда я открываю отладчик в IE, DOM верен.Когда я опускаю JS-функцию, DOM не работает.Так что этот пример работает.Я не понимаю, как на самом деле работает это выражение замены.Если я правильно понимаю string.replace, он должен был заменить строку самой функцией, но очевидно, что window.document.createElement был заменен и каким-то образом правильно выполнен с каждым «тегом», поэтому каждый «тег» был проанализирован функцией.Почему это работает?