Mira lo que pasa con tu codigo es que antes de querer usar cualquier metodo/funcion/objeto DOM, tienes que esperar a que la pagina carge. Tu no lo vez, pero tu script se ejecuta tan rapido, que no le da tiempo de cargar ningun elemento de la pagina al navegador. Entonces al buscar los elementos 'p' no encuentra nada.
La solucion es que tu codigo se ejecute cuando el navegador haya terminado de cargar toda la pagina (en general esto se debe hacer siempre), añadiendo un codigo como el siguiente.
Código javascript
:
Ver originalwindow.onload = tufuncion; //Al cargar la pagina, se ejecuta tufuncion, aqui SIN parentesis()
function tufuncion(){ //La funcion la defines donde quieras
var parrafos = document.getElementsByTagName("p"); //Ya funciona
alert(parrafos[0]);
}
Esto es un ejemplo comun, y sirve para cualquier script que utilize DOM. Ya si quieres hacer mas cosas (ejem, diferentes funciones en diferentes archivos javascript) se usa una solucion mas robusta, pero por ahora, con esto bastara.
Recuerda que la funcion que asignes no debe llevar parentesis, por que si no, estarias invocando a la funcion y asignando su valor a window.onload, y eso no es lo que quieres.
Otra forma, mas comun pero mas pesada (hace pesar de cierto modo el HTML) es:
Es exactamente igual solo que aqui si lleva parentesis. Te recomiendo que leeas algo sobre esto.
PD: Probablemente quieras sacar el texto del parrafo, ya que si usas alert(parrafo[0]) te saldra un mensaje algo raro, que es equivalente nodo elemento de parrafo(esto lo aprenderas luego). Para sacar 'lo de adentro' puedes usar parrafo[0].innerHTML. Pero ten cuidado ya que si tienes alguna otra etiqueta dentro de <p> (por ejemplo <b></b>) tambien se mostrara. Sacar el texto dentro de una etiqueta(y todas sus etiquetas hijas, por ejemplo <b> o <i>), es de esas cosas que IE hace mal, asi que tendrias que usar una funcion como esta:
Código javascript
:
Ver originalfunction sacarTexto(elemento){
if(elemento.innerText)//IE Style
return elemento.innerText;
else if(elemento.textContent) //Standar Style
return elemento.textContent;
}
La llamada seria asi:
Código javascript
:
Ver originalalert(sacarTexto(parrafos[0]));