jQuery函数 - 左右抖动效果,用于提示

Wordpress博客后台登录输入错误的话登录窗口有左右抖动的效果。弄成jQuery函数方便调用(前提已载入jQuery包)

function shake(o){
    var $panel = $("#"+o);
    box_left = ($(window).width() -  $panel.width()) / 2;
    $panel.css({'left': box_left,'position':'absolute'});
    for(var i=1; 4>=i; i++){
        $panel.animate({left:box_left-(40-10*i)},50);
        $panel.animate({left:box_left+2*(40-10*i)},50);
    }
}

shake函数的参数o就是dom元素的ID,一般就是div的ID。shake('panel'); 简单这样调用就能实现左右抖动的效果。。我用来提示 挺好的

Python的内建比较函数cmp比较原理剖析

cmp( x, y):比较2个对象,前者小于后者返回-1,相等则返回0,大于后者返回1.

Python的cmp比较函数比较原理

Python的cmp函数可以比较同类型之间,或者不同数据类型之间。然后根据Python的cmp比较函数的返回值来判定比较大小。

>>> list1, list2 = [123, 'xyz'], [456, 'abc']
>>> cmp(list1, list2)
-1

>>> cmp(list2, list1)
1
>>> list3 = list2 + [789]
>>> list3
[456, 'abc', 789]

>>> cmp(list2, list3)
-1

观察上面cmp函数的几个比较,可以总结:

Python的cmp比较函数
,如果我们比较的是两个同类的对象,比较操作是非常直观的。

  • 数字和字符串的比较,直接比较它们的值。
     
  • 对于序列类型的比较,方式上有相似。Python在两个对象基本不能比较的时候尽量做出公平的结果。比如当两个对象没有关系时,或者两种类型根本就没有用于比较的函数时,这时 Python只能根据"逻辑"来做出结论。比较的算法逻辑:
    1.   对两个列表的元素进行比较.
    2.   如果比较的元素是同类型的,则比较其值,返回结果.
    3.   如果两个元素不是同一种类型,则检查它们是否是数字.
         a. 如果是数字,执行必要的数字强制类型转换,然后比较.
         b. 如果有一方的元素是数字,则另一方的元素"大"(数字是"最小的")
         c. 否则,通过类型名字的字母顺序进行比较.
    4.   如果有一个列表首先到达末尾,则另一个长一点的列表"大".
    5.   如果我们用尽了两个列表的元素而且所有元素都是相等的,那么结果就是个平局,就
    是说返回一个 0.

这就是Python的cmp函数比较原理
了。

js - DOM编程核心

DOM Core常用部分:

DOM方法
创建节点:createElement(),createTextNode()
复制节点:cloneNode()
插入节点:appendChild(),insertBefore
删除节点:removeChild()
替换节点:replaceChild()
查找节点:getAttribute(),getElementById(),getElementsByTagName,hasChildNodes
设置节点属性:setAttribute()


DOM属性
节点的属性:nodeName,nodeType,nodeValue
遍历节点 树:childNodes,firstChild,lastChild,nextSibling,parentNode,previousSibling


下面给出这部分的简要用法,做个索引似帮助文档 
1.document.createElement("节点名"):新建一个节点

2.document.createTextNode("文本内容"):新建一个文本节点

3.节点.cloneNode(true|false):复制该节点,参数true则连同子结点一同复制,false则不复制子结点

4.节点.appendChild(子节点):在节点下添加子结点

5.父节点.insertBefore(新节点,参照点):在该父节点下的参照点前面插入新节点.通常父节点这样写:参照点.parentNode

6.父节点.removeChild(子结点):删除该父节点下指定的子结点,该子结点下的所有嵌套子结点都将被删除

7.父节点.replaceChild(新节点,旧节点):把该父节点下的指定子结点替换为新节点

8.节点.getAttribute("属性名"):搜索指定节点的属性名,返回该属性的属性值

9.document.getElementById("id名"):搜索文档中指定id名的节点,返回该节点对象

10.document.getElementsByTagName("标签名"):搜索文档中指定标签名的节点,返回一个节点对象列表(数组), 基数从0开始,具有length属性,表示数组长度

11.节点.hasChildNodes:该节点是否具有子结点,有,返回true,没有子结点返回false(比如文本节点和属性节点)

12.节点.setAttribute("属性名","属性值"):为该节点添加属性,若该属性已经存在则刷新属性值

13.节点.nodeName:根据节点类型区分
    元素节点:返回标签名(相当于tagName属性)
    文本节点:返回#text
    属性节点:返回属性名

14.节点.nodeType:返回节点类型,常用有一下三种:
    元素节点:返回1
    属性节点:返回2
    文本节点:返回3

15.节点.nodeValue:返回节点当前的值,根据节点类型区分:
    元素节点:返回null
    属性节点:返回属性值
    文本节点:返回文本内容

16.节点.childNodes:返回该节点下的所有一级子结点(前面有具体介绍过,这个属性在不同浏览器有不同解释)

17.节点.firstChild:返回该节点下的第一个子结点

18.节点.lastChild:返回该节点下的最后一个子结点

19.节点.nextSibling:返回该节点的下一个兄弟节点对象

20.节点.parentNode:返回该节点的父节点(肯定是一个元素节点,document节点的父节点为null)

21.节点.previousSibling:和nextSibling相对,返回该节点的上一个兄弟节点对象

php 高效删除重复元素

在PHP中,用于删除数组中重复元素有一个可用的函数,那就是 array_unique(), 但是它并不是一个最高效的方法,使用array_flip() 函数将比array_uniqure()在速度上高出五倍左右。


 

方法如下:


 

$arr = array(…………) ;//假设有一万个元素的数组,里面有重复的元素。


 

$arr = array_flip(array_flip($arr)); //这样便可以删除重复元素。


 

究竟是怎么回事呢?来看下array_flip()的作用:array_flip()用于将一个数组的每个元素的键和值交换,如:


 

$arr1 = array (”age” => 30, “name” => “快乐园”);


 

$arr2 = array_flip($arr1); //$arr2 就是 array(30 => “age”, “快乐园” => “name”);


 

在PHP的数组中,允许不同的元素可以取同一个值,但不允许同一个键名被不同的元素使用,如:


 

$arr1 = array (”age” => 30, “name” => “快乐园”, “age” => 20); “age” => 20将会取代”age” => 30


 

$arr1 = array (”name” => “快乐园”, “age” => 45); 


 

这里 $arr1与$arr2 是相等的。


 

于是,我们便可以知道,为什么 array_flip(array_flip($arr)) 可以删除数组中重复的元素了。首先,$arr里的值会变成键名,因为值是有重复的,变成键名之后这些重复的值便成了重复的键名,PHP引擎将重复的键名删除,只保留最后一个。如:


 

$arr1 = array (”age” => 30, “name” => “快乐园”, “age” => 20);


 

$arr1 = array_flip($arr1); //$arr1 变成了 array(”快乐园” => “name”, 20 => “age”);


 

//再把 $arr1 的键名与值还复:


 

$arr1 = array_flip($arr1); 


 

上面的代码写得简洁一些就是: $arr1 = array_flip(array_flip($arr1));