前几天在写一个自己的小项目,用到iframe。但是在使用Juery操作iframe的时候发现了一些问题,弄了近20分钟才取到了iframe文档里面的DOM元素节点。原因是什么呢?
这就要讲一下$(document).ready和window.onload的一些小区别。 $(document).ready是在文档的大致DOMj结构生成时,就去执行了,然而window.onload是在HTML文件的所有
内容加载完毕以后才开始调用函数。所以,我一直写 $("#iframe").contents().find("#dom") 一直找不到的原因是,我在$(document).ready里面写得,文档内有全部加载,iframe的
src没有加载文档内容进来,但是$(document).ready已经执行了,它只管大致DOM结构出来就执行,而不是全部文档加载后执行,所以一直都拿不到iframe里面的DOM元素!!!
所以正确的做法是:
1. 要获取iframe里面的DOM,必须在window.onload里面写,才能获取DOM元素对象。例如
/./正确做法
window.onload = function(){
$("#iframe").contents().find("#dom"); //此时能获取到iframe的DOM元素
}
//错误做法
$(function(){
$("#iframe").contents().find("#dom"); //获取不到DOM元素
});
2.第二点要讲的是 checkbox动态改变checked属性。使用attr会遇到坑
本来想做一个checkbox点击全选/全取消。 首先判断attr("checked")是否选中,已经选中,然后removeAttr("checked"),如果不是,则添加属性 attr("checked",true)。
逻辑上这样的判断是没有任何问题的。但是你一运行只能实现一次效果,后面的效果就没有了。也就是说点击全选,然后全选成功,再点击取消全选也成功。再点击,无效。
原因: jquery1.4以后新增 prop这个函数。和prop的效果大致也是一个意思。都是属性。 但是attr是文档节点的属性 ,然而prop是JS对象的属性。 所以我怀疑,用attr去
操作的时候,removeAttr就真地移除了checked="checked"。之后再怎么操作都不行了。 所以一下改用prop直接解决问题。
总结: 能用prop的地方,不要再使用attr了。attr也是依赖于prop实现的,所以用attr可能会出现一些问题。搞得我以为自己的逻辑出错了,排查半天。
3.PHP中再Linux服务器上部署,可以采用ln -s 软连接的形式,访问到当前网站目录的根目录的上一级目录或者更多。
使用php访问到软连接,会去执行软连接所链接的目录/文件。一般可以做项目的伪装,或者安全性。后面有待测试,不过这是个好办法,隐藏/添加目录url形式。不用去框架
router做任何配置。