--- title: ParentNode.firstElementChild slug: Web/API/ParentNode/firstElementChild translation_of: Web/API/ParentNode/firstElementChild ---
{{ APIRef("DOM") }}
La propiedad de sólo lectura ParentNode.firstElementChild retorna el primer hijo del objeto {{domxref("Element")}}, o bien null si no existen elementos hijos.
Esta propiedada fue definida inicialmente en el interfaz puro {{domxref("ElementTraversal")}}. Como este interfaz contenía dos juegos distintos de propiedades, uno orientado a {{domxref("Node")}} que tenía hijos, y otro a aquellos que eran hijos, se trasladaron a dos interfaces puros separados, {{domxref("ParentNode")}} y {{domxref("ChildNode")}}. En este caso, firstElementChild fue movido a {{domxref("ParentNode")}}. Es un cambio de carácter estrictamente técnico que no debería afectar a la compatibilidad.
var childNode = elementNodeReference.firstElementChild;
<p id="para-01">
<span>First span</span>
</p>
<script type="text/javascript">
var p01 = document.getElementById('para-01');
alert(p01.firstElementChild.nodeName)
</script>
En este ejemlpo, la alerta muestra 'span', que es el nombre de la etiqueta del primer nodo hijo dele elemento párrafo.
Esta propiedad no está soportada con anterioridad a IE9, así que el siguiente fragmento puede ser usado para añadir el soporte a IE8:
// Source: https://github.com/Alhadis/Snippets/blob/master/js/polyfills/IE8-child-elements.js
if(!("firstElementChild" in document.documentElement)){
Object.defineProperty(Element.prototype, "firstElementChild", {
get: function(){
for(var nodes = this.children, n, i = 0, l = nodes.length; i < l; ++i)
if(n = nodes[i], 1 === n.nodeType) return n;
return null;
}
});
}
| Especificación | Estado | Observaciones |
|---|---|---|
| {{SpecName('DOM WHATWG', '#dom-parentnode-firstelementchild', 'ParentNode.firstElementChild')}} | {{Spec2('DOM WHATWG')}} | Dividido el interfaz ElementTraversal en {{domxref("ChildNode")}} y ParentNode. Este método queda definido ahora en el segundo.Los {{domxref("Document")}} y {{domxref("DocumentFragment")}} implementaron los nuevos interfaces. |
| {{SpecName('Element Traversal', '#attribute-firstElementChild', 'ElementTraversal.firstElementChild')}} | {{Spec2('Element Traversal')}} | Añadida su definición inicial al interfaz puro ElementTraversal y lo usa en {{domxref("Element")}}. |
{{ CompatibilityTable() }}
| Prestación | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|
| Soporte básico (en {{domxref("Element")}}) | 1.0 | {{CompatGeckoDesktop("1.9.1")}} | 9.0 | 10.0 | 4.0 |
| Soporte en {{domxref("Document")}} y {{domxref("DocumentFragment")}} {{experimental_inline}} | 29.0 | {{CompatGeckoDesktop("25.0")}} | {{CompatNo}} | 16.0 | {{CompatNo}} |
| Prestación | Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
|---|---|---|---|---|---|
| Soporte básico (en {{domxref("Element")}}) | {{ CompatVersionUnknown() }} | {{CompatGeckoMobile("1.9.1")}} | {{ CompatVersionUnknown() }} | {{ CompatVersionUnknown() }} | {{ CompatVersionUnknown() }} |
| Soporte en {{domxref("Document")}} y {{domxref("DocumentFragment")}} {{experimental_inline}} | {{CompatVersionUnknown}} | {{CompatGeckoMobile("25.0")}} | {{CompatNo}} | 16.0 | {{CompatNo}} |