var head = txt.split("<head")[1] .split(">") .slice(1) .join(">") .split("</head>")[0];
O por ejemplo para obtener el contenido del elemento body:
var body = txt.split("<body")[1] .split(">") .slice(1) .join(">") .split("</body>")[0];
Lo mismo pero utilizando expresiones regulares:
var head = txt.match(/<(.*|\n*|\t*|(\r\n)*)head(.*|\n*|\t*|(\r\n)*)> (.|\n|\t|\r\n)*<(.*|\n*|\t*|(\r\n)*)\/(.*|\n*|\t* |(\r\n)*)head(.*|\n*|\t*|(\r\n)*)>$/gim); var body = txt.match(/<(.*|\n*|\t*|(\r\n)*)body(.*|\n*|\t*|(\r\n)*)> (.|\n|\t|\r\n)*<(.*|\n*|\t*|(\r\n)*)\/(.*|\n*|\t* |(\r\n)*)body(.*|\n*|\t*|(\r\n)*)>$/gim);
Es mejor usar la expresión regular ya que en los flags se indica case-insensitive.
Ahora podemos llenar las dos secciones de un iframe, tanto el head como el body con un string de tipo HTML:
$('#myIframe').contents().find('head').html(head); $('#myIframe').contents().find('body').html(body);