开博了,欢迎来访!

php 递归 实现无限级分类

2011年9月17日 wangjunjie 没有评论

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;
}
}

分类: PHP 标签:

jQuery each 用法

2011年9月16日 wangjunjie 没有评论

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;

 })

分类: JQuery 标签:

document.compatMode属性

2011年9月16日 wangjunjie 没有评论

document.compatMode用来判断当前浏览器采用的渲染方式。

官方解释:

        BackCompat:标准兼容模式关闭。
        CSS1Compat:标准兼容模式开启。

当document.compatMode等于BackCompat时,浏览器客户区宽度是document.body.clientWidth;
当document.compatMode等于CSS1Compat时,浏览器客户区宽度是document.documentElement.clientWidth。

浏览器客户区高度、滚动条高度、滚动条的Left、滚动条的Top等等都是上面的情况。

分类: JavaScript 标签:

javascript 获取元素位置的快速方法

2011年9月16日 wangjunjie 没有评论
使用getBoundingClientRect()方法。它返回一个对象,其中包含了left、top、right、bottom四个属性,分别对应了该元素的左上角和右下角相对于浏览器窗口(viewport)左上角的距离。
所以,网页元素的相对位置就是
     var X= obj.getBoundingClientRect().left;
     var Y =obj.getBoundingClientRect().top;
再加上滚动距离,就可以得到绝对位置
     var X= obj.getBoundingClientRect().left+document.documentElement.scrollLeft;
     var Y =obj.getBoundingClientRect().top+document.documentElement.scrollTop;
目前,IE、Firefox 3.0+、Opera 9.5+都支持该方法,而Firefox 2.x、Safari、Chrome、Konqueror不支持。
分类: JavaScript 标签:

javascript 获取网页的大小

2011年9月16日 wangjunjie 没有评论
一、网页的大小和浏览器窗口的大小
       一张网页的全部面积,就是它的大小。通常情况下,网页的大小由内容和CSS样式表决定。
       浏览器窗口的大小,则是指在浏览器窗口中看到的那部分网页面积,又叫做viewport(视口)。
       很显然,如果网页的内容能够在浏览器窗口中全部显示(也就是不出现滚动条),那么网页的大小和浏览器窗口的大小是相等的。
二、获取网页的大小
       网页上的每个元素,都有clientHeight和clientWidth属性。这两个属性指元素的内容部分再加上padding的所占据的视觉面积,不包括border和滚动条占用的空间,因此,document元素的clientHeight和clientWidth属性,就代表了网页的大小。
       网页上的每个元素还有scrollHeight和scrollWidth属性,指包含滚动条在内的该元素的视觉面积。那么,document对象的scrollHeight和scrollWidth属性就是网页的大小,意思就是滚动条滚过的所有长度和宽度。
       如果网页内容能够在浏览器窗口中全部显示,不出现滚动条,那么网页的clientWidth和scrollWidth应该相等。但是实际上,不同浏览器有不同的处理,这两个值未必相等。所以,我们需要取它们之中较大的那个值。
       获取网页大小的方法如下:
       function getPagearea(){
    if (document.compatMode == “BackCompat”){
      return {
        width: Math.max(document.body.scrollWidth,
                                                        document.body.clientWidth),
        height: Math.max(document.body.scrollHeight,
                                                          document.body.clientHeight)
      }
    } else {
      return {
        width: Math.max(document.documentElement.scrollWidth,
                document.documentElement.clientWidth),
        height: Math.max(document.documentElement.scrollHeight,
                 document.documentElement.clientHeight)
      }
    }
  }
       函数使用注意问题:
       1)这个函数必须在页面加载完成后才能运行,否则document对象还没生成,浏览器会报错。
       2)大多数情况下,都是document.documentElement.clientWidth返回正确值。但是,在IE6的quirks模式中,document.body.clientWidth返回正确的值,因此函数中加入了对文档模式的判断。
       3)clientWidth和clientHeight都是只读属性,不能对它们赋值。
分类: JavaScript 标签:

javascript 阻止事件冒泡

2011年9月16日 wangjunjie 没有评论

javascript阻止事件冒泡

方式一:event.stopPropagation();

             $(“#div1″).mousedown(function(event){
                       event.stopPropagation();
             });

方式二:return false;

             $(“#div1″).mousedown(function(event){
                      return false;
             });

但是这两种方式是有区别的。

return false 不仅阻止了事件往上冒泡,而且阻止了事件本身。

event.stopPropagation() 则只阻止事件往上冒泡,不阻止事件本身。

分类: JavaScript 标签:

javascript 阻止表单提交

2011年9月16日 wangjunjie 没有评论

//表单数据验证 通过数据验证返回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 标签:

javascript 获取form里的表单元素

2011年9月16日 wangjunjie 没有评论

//获取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 标签:

javascript 获取file的全路径

2011年9月16日 wangjunjie 没有评论

图片上传时,可能要在客户端预览一下,这样我们就要用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 标签:

javascript cookie

2011年9月16日 wangjunjie 没有评论

创建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=/”;
        }
    }

分类: JavaScript 标签: