Jurchen
2016-09-01 10:06
求助:为什么bt2不需要去重?单击一次后,试过变量p中还有内容,但是再单击也不会再把p元素添加到页面?谢谢!
1.直接点击右边按钮,出现下面添加成功的,是因为内存中还有刚才detach()的p对象,这儿的重置代码没删除内存,所以会造成有这种情况,可以刷新右边页面,不用重置代码。
正常的直接点击右边按钮,其实是执行$("body").append(undefined);,页面中没有添加任何元素
2.#bt1为什么去重,当有p节点的时候才执行删除且保存到变量p中,没有p节点的时候,不执行删除且保存。
如果不去重,即没有p节点的时候,执行删除且保存到变量p中,那右边按钮就是无效的了
3.#bt2为什么不去重,append在是调用原生的appendChild。如果调用appendChild()将已存在文档中的一个节点再次插入,那个节点将自动从它当前的位置删除并在新的位置重新插入:没有必要显式删除该节点。
因为bt2不是删除,即使多次点击不会丢失数据,但如果是bt1没有去重,连续点击会连续响应,数据会丢失,即使后面点击bt2也无法找回了。
其实,bt2也应该去重的;不然你先点击bt2下面又会出现p元素;
$("#bt2").click(function() { if ($("p").length) return; //去重,(只有P元素不出现时才append) //把p元素在添加到页面中 //事件还是存在 $("body").append(p); });
有同样的困惑,弄懂了一部分,还是没完全懂。以下是我的一些理解:
加了一行代码:
$("#bt2").click(function() {
console.log(p);
$("body").append( p);
});
在浏览器中调试运行发现,再次单击btn2时,console.log(p)是执行了的,而且运行到$("body").append( p);这一句时没有报错,而是顺利地运行了,只是页面没有变化。
所以,此时内存中应该还是有p的,而且每次btn2的点击事件都执行了,只是 语句$("body").append( p);没有得出我们所想的结果,问题应该在这,但我也还没找到原因,希望有大神能解答~
p元素存在的话就执行detach,没有的话就不执行,btn2,只有执行过detach才能执行,不然内存中没有p的模型对象,所以不需要去重。
jQuery基础(二)—DOM篇
114004 学习 · 614 问题
相似问题