php 递归 实现无限级分类
class Programa extend CI_Model{
//用来存储分类结果数组
private $programa=array();
function __construct(){
parent::__construct();
}
//使用时 调用这个方法即可
function get_programa(){
//获取顶级分类
$query=$this->get_all_data_where(array(“parentID”=>0));
$query=$query->result_array();
//遍历顶级分类 查询子分类
foreach ($query as $value){
//先把遍历出来的顶级分类 加到 $programa储分类结果数组中
array_push($this->programa,$value);
//查询子分类
$this->get_child_node($value);
}
return $this->programa;
}
//查询子分类 参数:父分类数组
function get_child_node($parentNode){
//查询子分类
$query=$this->get_all_data_where(array(‘parentID’=>$parentNode['programaID']));
$query=$query->result_array();
//遍历子分类 在查询子分类
foreach ($query as $value){
//判断分类的级别 在分类前加‘—’ 让结果看得有层次感
for ($i=1;$i<$value['level'];$i++){
$value['title']='—'.$value['title'];
}
array_push($this->programa,$value);
//递归
$this->get_child_node($value);
}
}
//按条件 获取数据
public function get_all_data_where($where,$orderBy=array(‘sortValue’=>’desc’)){
$this->load->database();
foreach ($orderBy as $key=>$value){
$this->db->order_by(“{$key}”, “{$value}”);
}
$query=$this->db->get_where(‘programa’,$where);
$this->db->close();
return $query;
}
}
jQuery each 用法
var obj={one:1,two:2,three:3};
$.each(obj,function(index,content){
alert(index);//索引 one two three
alert(content);//值 1 2 3
});
<p>1</p>
<p>2</p>
<p>3</p>
$(“p”).each(function(index){
alert(index);//索引 0 1 2
$(this).attr(“color”,”red”);
});
有时我们在遍历的时候,在符合一定条件时遍历就会停止,停止遍历的方法是
$(“p”).each(function(){
return false;
})
document.compatMode属性
document.compatMode用来判断当前浏览器采用的渲染方式。
官方解释:
BackCompat:标准兼容模式关闭。
CSS1Compat:标准兼容模式开启。
当document.compatMode等于BackCompat时,浏览器客户区宽度是document.body.clientWidth;
当document.compatMode等于CSS1Compat时,浏览器客户区宽度是document.documentElement.clientWidth。
浏览器客户区高度、滚动条高度、滚动条的Left、滚动条的Top等等都是上面的情况。
javascript 获取元素位置的快速方法
javascript 获取网页的大小
javascript 阻止事件冒泡
javascript阻止事件冒泡
方式一:event.stopPropagation();
$(“#div1″).mousedown(function(event){
event.stopPropagation();
});
方式二:return false;
$(“#div1″).mousedown(function(event){
return false;
});
但是这两种方式是有区别的。
return false 不仅阻止了事件往上冒泡,而且阻止了事件本身。
event.stopPropagation() 则只阻止事件往上冒泡,不阻止事件本身。
javascript 阻止表单提交
//表单数据验证 通过数据验证返回true 否则返回false
function validate(){
//标记是否通过验证
var flag=true;
return flag?true:false;
}
<form action=’test.php’ enctype=’multipart/form-data’ accept-charset=’utf-8′ method=’post’ onsubmit=’return validate()’>
<input type=’submit’ value=’提交’ onclick=’return validate()’>
</form>
validate()函数可以在submit按钮的onclick事件调用,也可以在form的onsubmit事件里调用,注意在函数前加return,否则验证不通过表单也会提交
javascript 获取form里的表单元素
//获取form对象
var form=document.getElementByIdx_x(‘my_form’);
//用户名input对象 user_name是对象的name属性
var userName=form.user_name;
//用户名清空
userName.value=‘’;
//用户密码input对象 password是对象的name属性
var password=form.password;
//用户密码清空
password.value=”;
javascript 获取file的全路径
图片上传时,可能要在客户端预览一下,这样我们就要用javascript获取上传文件的全路径,以下是获取全路径的方法
function getFilePath(obj){
if(obj){
//ie
if (window.navigator.userAgent.indexOf(“MSIE”)>=1){
obj.select();
// IE下取得图片的本地路径
return document.selection.createRange().text;
}else if(window.navigator.userAgent.indexOf(“Firefox”)>=1){
//firefox
if(obj.files){
// Firefox下取得的是图片的数据
return obj.files.item(0).getAsDataURL();
}
return obj.value;
}
return obj.value;
}
}
javascript cookie
创建cookie时,可以设置6个部分:name(名称)、value(值)、expires(过期时间)、path(路径)、domain(域)、secure(安全),其中后四个是可选的。
1、名和值
cookie的第一部分是名和值,名用来引用cookie,值是cookie的信息部分,这两部分是必选的。
cookie的值是一个基本字符串,但如果保存的是数值数据,该字符串也可以保存数字字符。
分号在cookie中用作不同部分的分割,如果保存的字符串中有分号,应该对字符串进行特殊编码。
设置cookie的名值:
document.cookie=’userName=wangjunjie’。
2、过期时间
如果cookie不设置expires,用户关闭浏览器后cookie过期,下次打开浏览器时该cookie不复存在。
过期时间的格式是非常重要的,对于IE浏览器尤为重要,它应该与toGMTString()给出的格式相同。
设置cookie的过期时间:
var expireDate=new Date();
expireDate.setMonth(expireDate.getMonth()+6);
document.cookie=’userName=wangjunjie;expires=’+expireDate.toGMTString();
3、路径
站点里有两个目录~/A和~/B,~/B中设置的cookie可以在它的目录及其子目录下访问,不能在~/A中访问,如果想在站点里的任何地方访问~/B中设置的cookie,则需要把path设置为’/'。
设置cookie的路径:
document.cookie=’userName=wangjunjie;path=/’;
4、域
默认情况下cookie仅用于设置它的域下面的页面,假设现在有两个站点a.blog.com和b.blog.com,在a.blog.com下设置的 cookie不能在b.blog.com下访问,反之亦然,如果想在两个站点下都访问这个cookie需要该domain值。
设置cookie的域:
document.cookie=’userName=wangjunjie;domain=blog.com’;
5、安全
cookie的最后一部分是一个Boolen值,默认为false,总是发送cookie,补考虑安全性,如果设置为true,则cookie仅发送给尝试使用安全通道检索它的Web服务器。
cookie的增、读、删操作
function setCookie(n,v){
var Days = 30; //此 cookie 将被保存 30 天
var exp = new Date(); //new Date(“December 31, 9998″);
exp.setTime(exp.getTime() + Days*24*60*60*1000);
document.cookie = n + “=”+ decodeURI (v) + “;expires=” + exp.toGMTString()+”;path=/”;
}
function getCookie(n){
var c = document.cookie.match(new RegExp(“(^| )”+n+”=([^;]*)(;|$)”));
if(c != null){
return decodeURIComponent(c[2]);
}else{
return null;
}
}
function clearCookie(n){
var exp = new Date();
exp.setTime(exp.getTime() – 1);
var c=tm.method.getCookie(n);
if(c!=null){
document.cookie= n + “=”+c+”;expires=”+exp.toGMTString()+”;path=/”;
}
}
