2010-12-03 16 views
6

He estado en esto por unas horas y estoy a punto de comenzar a arrancarme el pelo. Básicamente lo que tengo que hacer es obtener el primer elemento que aparece en el cuerpo y luego insertar otro elemento antes.Obteniendo el primer elemento de <body> luego insertBefore()

He intentado lo siguiente para obtener el primer elemento sin éxito (no definida o nula)

window.document.body.firstChild 

document.getElementsByTagName("body").firstChild 

document.getElementsByTagName("body")[0].firstChild 

window.document.documentElement.childNodes[1].childNodes[0] 

Y toda una serie de intentos de mezclar y combinar los fragmentos anteriores. También intenté obtener el cuerpo y luego appendChild() sin éxito.

Cualquier ayuda aquí es apreciada. Gracias por adelantado.

+0

es en un marco flotante, o un documento normal? – danjah

+1

'document.body.firstChild' está bien. ¿Estás seguro de que tienes el orden de los argumentos para 'insertBefore()' corregir? –

Respuesta

2

quieres algo como esto:

var first = document.body.children[0]; 
var beforeEle = document.createElement("div"); 
beforeEle.innerHTML = "I'm the first element in the body!"; 
document.body.insertBefore(beforeEle, first); 
+0

'children' no es compatible universalmente (por ejemplo, se introdujo en Firefox solo en la versión 3.5). Tendrás que usar 'childNodes' por ahora. –

12

Sí, document.body.firstChild es correcta. Es probable que esté pasando por alto el hecho de que insertBefore es un método del elemento principal y toma el nuevo elemento antes del existente. Por ejemplo:

var addedElement = document.createElement('p'); 
addedElement.appendChild(document.createTextNode('Hello, world!')); 

var body = document.body; 
body.insertBefore(addedElement, body.firstChild); 
1

La solución más elegante para anteponer un elemento al cuerpo pude con es una sola línea:

document.body.insertBefore(element, dom.document.body.firstChild) 
Cuestiones relacionadas