JavaScript中appendChild()的用法

为什么我使用appendChild()追加子节点只能对id属性的元素生效,如果直接用标签和class属性追加就会报错:VM970:1 Uncaught ReferenceError: p is not defined at <anonymous>:1:17

代码如下:

<body>
<p id="p1">p1</p>
<p>p2</p>
<p class="p3">p3</p>

<div id="app">
    
</div>

<script src="../js/qg2.js"></script>
</body>

js代码:

var app = document.getElementById('app');

app.appendChild(p1);//用id名,可以成功追加

app.appendChild(p[0]);//直接用标签名,不能追加

app.appendChild(p3);//直接用class名,不能追加

//为什么appendChild()函数只能用id才能追加?还是用标签或class存在其他方法?求各位大神解惑

appendChild的参数应该是一个node参数,p1是不是引入了其他js里面有这个对象,或者其他的js里面会自动转化为html的文档对象