Akawa

ETY001的博客

1、php页面产生数据存入数据库时,应使用

1
header("content-type:text/html;charset=utf-8");

对php页面的编码格式进行强制设置,并且还需要加入一行代码

1
mysql_query("set names utf8");

2、在做调试的时候,记的给自己添加进去的输出语句写一个不一样的标示性的注释,方便删除测试语句的时候查找。

3、这周在解决的一个bug的时候发现,
jQuery中的$.ajax方法在chrome浏览器和IE浏览器中的执行顺序是不同的,
这还是在网络上搜索出来的。具体的表现如下:

ok.php文件中的js源代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/*for (i=1;i<15;i++)
{
alert(i);
$.get("test.php",{"id":i},function(data){$("#return").append(data+" ")});
}*/
for(i=1;i<15;i++)
{
//alert(i);
$.ajax({
url:"/test.php",
type:"get",
data:"id="+i,
dataType:"text",
success:function(recvData){
$("#return").append(recvData+" ");
},
error:function(a,b,c){
alert("a:"+a+" b:"+b+" c:"+c);
},
});
}

/*$(function(){
$("header").click(function(){
testajaxget(1);
})
});*/
function testajaxget(id)
{
if(id==15)
return;
$.get("test.php",{"id":id},function(data){$("#return").append(data+" ")});
id++;
setTimeout("testajaxget("+id+")",1000);
}

test.php文件的源代码如下:

1
<?php echo $_GET['id'];?>

通过调试运行,可以发现1到14的顺序只有IE浏览器是一直正确的,

而chrome浏览器在不加alert的时候,也是一直正确的,但是加上alert后,
顺序就开始发生变化了,并且是没有规律的。

网络上给出的一种解决方案是用类似ok.php文件中testajaxget()函数里的setTimeout函数让数据提交延时。

而我遇到的这个bug的代码如下:

1
2
3
4
5
function passAudit(id){
$.get("/index.php?action=oa|OAContractChargesPassAudit",{"id":id}, function(data){
if(data=='ok') window.location.reload();
});
}

问题的表现是,在chrome浏览器下点击那个触发该js函数的超链接时,页面刷新了,

但是id值并没有提交到指定的页面处理,这一点我是通过在if判断前加alert知道的。

但是在if前加alert后,执行时,alert弹出,点击确定后,id就能成功提交了,

而ie下面的表现是,在alert前id就已经提交了,因为alert中有内容出现,

但是点击确定后,却返回到了index.php页面。这个表现我直到最后还是不明白,这就是所谓的异步吧,对于该问题持续关注……

最后的解决方法是在if判断后加了一个alert。

4、对于hidden属性的input不能掉以轻心,下面的几个截图就说明了一个问题:

最初hidden属性的input在要显示的元素的上方

最初hidden属性的input在要显示的元素的上方

在IE8下的效果就是这样,chrome倒是显示的很正常

在IE8下的效果就是这样,chrome倒是显示的很正常

修改后显示效果如下

修改后显示效果如下

5、调试PHP的时候,一定记得先检查每句话的结尾的分号是不是有加!!

6、javascript中的变量作用域注意事项:

虽然在全局作用域中编写代码时可以不适用var语句,但是在声明局部变量的时候,一定要使用var语句。下面的为相关测试代码:

1
2
3
4
5
6
7
8
9
10
scope = "global";
function checkscope() {
scope = "local";
document.write(scope);
myscope = "local";
domcument.write(myscope);
}
checkscope();
document.write(scope);
document.write(myscope);

7、关于PHP中的empty函数,

bool empty ( mixed $var )

如果 var 是非空或非零的值,则 empty() 返回 FALSE。换句话说,

_””、_0_、“0”_、NULLFALSE、_array()、_var $var; 

以及没有任何属性的对象都将被认为是空的,如果 var 为空,则返回 TRUE

注意:为空的条件,0这个值也算在其中!!!!

8、datediff函数在mysql下只有起始时间、结束时间2个参数。

9、PHP删除文件函数unlink()。

10、读写相关的问题是永远存在的,

文件锁就是为了解决这个问题而做的,其实它就是个简单的信号量。读写相关性指由于同时读写文件造成文件数据的随机性冲突。
为了 明确知道在何时通过何种操作对更改或是读取了文件中的那些数据,
有必要对操作进行序列化,原子化,同步化,使用户能确知在何时文件中有什么数据。
文件锁就 是其中一个工具。

文件系统一般有两种锁,共享锁及排它锁,也可被称为读锁和写锁。

文件系统锁的特点:
一个文件打开的时候只能拥有一把锁,就是说在同时,不能给一个文件同时分配两把以上的锁。

读写已被上锁的文件的用户可以持有这把锁,即持有这把锁的用户可以对该文件进行相应的操作,如读或写。用户可以申请持有某个文件锁,如果文件开始无锁,申请持有锁之前先由系统为该文件创建了一把锁,然后该申请者持有它。

持有锁的规则:如果这个文件已拥有一个读(共享)锁,其它用户不能为该文件分配排它锁或只读锁,但可以持有这把锁,也就是说其它用户可以读文件, 但只要该文件被锁住,就没有用户可以对其进行写入。如果该文件已有一把排它锁且已为某用户持有,则没有任何用户可以再持有这把锁,除非持有者解锁。

有一个重要的概念要记住:对文件的操作本身与锁其实没有什么关系,无论文件是否被上锁,用户都可以随意对文件进行正常情况下的任何操作,但操作系 统会检查锁,针对不同的情况给予不同的处理。比如说在无锁的情况下,任何人可以同时对某文件进行任意的读写,当然这样很有可能读写的内容会出现错误——注 意只是内容出错,操作并不会出错。加锁后,某些操作在某些情况下会被拒绝。文件锁的作用并不是保护文件及数据本身,而是保证数据的同步性,因此文件锁只对 持有锁的用户才是真正有效的,也只有所有用户都使用同一种完全相同的方式利用文件锁的限制对文件进行操作,文件锁才能对所有用户有效,否则,只要有一个例 外,整个文件锁的功能就会被破坏。比如,所有人都遵循的开文件,加锁,操作读写,解锁,关闭文件的步骤的话,所有的人操作都不会出现问题,因为基于文件锁 的分配及持有原则,文件中的数据的更新是作为原子操作存在的,是不可分的,因此也是同步的,安全的。但假如某个人不是采取此步骤,那么他在读写时就会出现 问题,不是读不准就是写不进等等。

基于以上原理,对读数据是否锁定这点就值得说说。一般来说,写数据的时候排它锁定是唯一的操作,它这时保证写到文件中的数据是正确的,文件被锁 时,其它用户无法得到该锁,因此无权做任何操作。在读的时候,要视具体情况而定,大多数情况下,如果不需要特别精确或是敏感的数据,无需锁定,因为锁定要 花时间和资源,一个人申请持有锁花不了时间,人一多就有问题了,最主要的是,如果该文件需要被更新的话,假如被上了只读锁,则写入无法进行,因为那些想写 入的用户将得不到排它锁,如果同时申请持有只读锁的人过多的话,排它锁就有可能一直申请不到,这样表现就是文件可能很长时间内无法被写入,显得很慢。一般 来说,写文件的机会相对较少,也更重要,因此主要做好排它锁定,只读锁在多数情况下并无必要。那么只读锁用在何处呢?只读锁其实只对用户本身有用,只读锁 保证用户读到的数据是确实从文件中读到的真实数据,而不是被称为“dirty”的脏数据。其实,这个还是针对那些不用锁的其它用户对文件的误操作,假如文 件上锁,其它用户不一定非要通过锁对文件进行读写,如果他是直接读写的话,对上了锁的文件操作不一定有效,持有读锁的用户可以肯定在他读数据的时候读出来 的是从真实的文件中得到的,而不是同时已被覆盖掉的数据。

因此,在写入的时候上排它锁应该是天经地义的,可以保证这时数据的不会出错。如果你不申请共享锁,可能读出的数据有错误,但对文件本身没有任何影 响,影响只是对用户的,申请共享锁后读出的数据肯定是当时读的时候文件中的真实数据,如果不是为了保证数据的精确性,共享锁可以不加,充其量就是重新读一 次,如果你读它是为了写入,不如直接加排它锁,没有必要用共享锁。

还有一点要强调的是:文件锁只对使用它的用户,而且是按规则使用它的用户才有效,否则,你用你的,我用我的,有的用,有的不用,还是会乱套的,错 误还是会出现的,对同一个文件,只有大家用同一个规则用文件锁,才能保证每个用户在对该文件进行共享操作的时候不会出现读写错误。

11、当在 Unix 平台上规定路径时,正斜杠 (/) 用作目录分隔符。而在 Windows 平台上,正斜杠 (/) 和反斜杠 () 均可使用。

12、MYSQL数据库UTF8编码使用汉字拼音第一个字母排序的方法,

1
select * from tag order by convert(tag USING gbk) COLLATE gbk_chinese_ci limit 100

SQL语句里滑润油convert函数转换一下即可。

13、在mysql中一次插入多条数据,

1
INSERT INTO users(name, age) VALUES('姚明', 25), ('比尔.盖茨', 50), ('火星人', 600);

14、在制作列表页的时候,可以使用mb_strimwidth函数限制简介字数。

1
2
3
<?php
echo mb_strimwidth("Hello World", 0, 10, "...");
?>

15、strip_tags() 函数剥去 HTML、XML 以及 PHP 的标签。

16、func_num_args() 获取当前函数调用时提交的参数个数。

17、GD库控制图片生成质量的参数是负责最后生成图片的函数的第三个参数!(我勒个去。。。害我为了实现压缩图片功能找了大半天。。。)

18、parse_str() 函数把查询字符串解析到变量中

19、file_get_contents() 函数把整个文件读入一个字符串中

20、stream_set_blocking() — Set blocking/non-blocking mode on a stream

21、imagecopyresized(),

Note:因为调色板图像限制(255+1种颜色)有个问题。
重采样或过滤图像通常需要多于255种颜色,计算新的被重采样的像素及其颜色时采用了一种近似值。对调色板图像尝试分配一个新颜色时,如果失败我们选择了计算结果最接近(理论上)的颜色。这并不总是视觉上最接近的颜色。这可能会产生怪异的结果,例如空白(或者视觉上是空白)的图像。要跳过这个问题,请使用真彩色图像作为目标图像,例如用 imagecreatetruecolor() 创建的。

22、解决跨域session失效问题,在php中加上

1
header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');

23、touch函数

bool touch ( string $filename [, int $time [, int $atime ]] )

尝试将由 filename 给出的文件的访问和修改时间设定为给出的时间。
如果没有给出可选参数 time,则使用当前系统时间。
如果给出了第三个参数 atime,则给定文件的访问时间会被设为 atime。
注意访问时间总是会被修改的,不论有几个参数。
如果文件不存在,则会被创建。成功时返回 TRUE, 或者在失败时返回 FALSE.

24、function gethostbyname — Get the IPv4 address corresponding to a given Internet host name

25、FIND_IN_SET()可以用来处理类似3,6,34,67,235这样的存在某个字段中的字符串。

26、du –max-depth=1 -h  查目录深度为一的目录大小。

27、获取根目录的一种方式:

1
2
3
4
//其中ntalker/install.php是当前文件
if(!defined('APP_ROOT_PATH')){
define('APP_ROOT_PATH', str_replace('ntalker/install.php', '', str_replace('\\', '/', __FILE__)));
}

  1. 数组的声明规则:
    (1)数组的名称由一个美元符号开始,第一个字符是字母或下划线,其后是任意数量的字幕,数字或下划线。
    (2)在同一个程序中,标量变量和数组变量都不能重名。
    (3)数组的名称区别大小写。

  2. 通过标示符[]可以直接为数组元素复制,格式如下:
    $array_name[key]=value;或者$array_name[]=value;

  3. 应用array()函数创建数组,语法如下:
    array array([mixed…])
    参数mixed的语法为“key=>value”,多个参数mixed用逗号分开,分别定义了索引(key)和值(value)。应用array函数声明数组时,数组下标既可以是数值索引也可以是关联索引。

示例:

1
2
3
4
5
6
7
8
9
10
11
12
<?php
$arr1=array('PHP'=>'php','JAVA'=>'java'); //以字符串作为数组索引,指定关键字,关联数组
print_r($arr1);
echo "\n".$arr1['JAVA']."\n";

$arr2=array('PHP','Java'); //以数字作为数组索引,从0开始,没有指定关键字,数字索引数组
print_r($arr2);
echo "\n".$arr2['0']."\n";

$arr3=array(0=>'PHP',1=>'Java',1=>'domyself.me'); //指定相同的索引,后一个将会覆盖之前的值
print_r($arr3);
?>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
运行结果:
Array
(
[PHP] => php
[JAVA] => java
)

java
Array
(
[0] => PHP
[1] => Java
)

PHP
Array
(
[0] => PHP
[1] => domyself.me
)
  1. 遍历数组有三种方法:
    (1)用foreach遍历数组
    (2)用list()和each()遍历数组
    示例:
1
2
3
4
5
6
<?php
$arr=array(0=>'PHP',1=>'VB',2=>'Java',3=>'VC');
while(list($key,$val)=each($arr)){
echo "$key=$val\n";
}
?>

说明:each()返回数组中当前指针指向位置的键名和对应的值,然后移动指针到下一个位置,返回值就是4个元素的关联数组,通过list()语言结构赋给指定的值。

(3)用for和count()来遍历数组
count($arr)的意思就是$arr的上界。

  1. 输出数组两种方法,一种是直接使用print_f(),一种是使用echo语句。前者可以把数组全部输出,包括结构,后者只能输出指定的数组项,还需要借助循环才能全部输出数组。

  2. 数组函数
    (1)count()统计数组元素个数
    (2)向数组添加元素,array_push()把数组当成一个栈,将传入的变量压入该数组的末尾。语法如下:
    int array_push(array array,mixed var[,mixed…])
    参数array为指定的数组,参数var是压入数组中的值。
    建议:使用[]给数组添加元素。
    (3)获取数组中最后一个元素,同样是把数组当作了栈,函数是:array_pop()。
    (4)删除数组中重复元素,array_unique()
    (5)获取数组中指定元素的键名,array_search(),语法如下:
    mixed array_search(mixed needle,array haystack[,bool strict])
    参数needle指定在数组中搜索的值,如果needle是字符串,则在搜索needle的值时是区分字符串的大小写的。参数haystack指定被搜索的数组。参数strict为可选参数,如果值为true,还将在haystack中检查needle的类型。(该函数区分大小写)
    注意:使用array_search()函数查询数组中的指定元素时,如果查询的元素在数组中多次出现,那么该函数只返回第一个匹配的键名,如果想返回所有的,用array_keys()。

1
2
3
4
5
6
7
补充:
其他的创建数组的方法
array_combine()===以一个数组为关键字,另一个数组为值创建新数组
array_fill()===用值填充一个数组
array_pad()===用一个值把数组填充到指定长度
compact()===创建包含变量及其值的数组
range()===创建一个包含一定范围内的元素的数组

由于已经有了一定的基础,所以我现在写的这个php笔记会跳过很多我已经很熟练的东西,只记录我不熟悉的东西。

  1. foreach循环(擅长处理数组,是遍历数组的一种简单方法)
    语法:
1
2
3
4
5
6
foreach(array_expression as $value)
statement

foreach(array_expression as $key=>$value)
statement
说明:foreach语句将遍历数组array_expression,每次循环时,将当前数组中的值赋给$value(或$key和$value),同时数组指针向后移动,直到遍历结束。

说明:除非数组是被引用,否则foreach所操作的是指定数组的一个拷贝,而不是该数组本身。因此数组指针不会被each()结构改变,对返回的数组单元的修改也不会影响原数组。不过原数组的内部指针的确在处理数组的过程中向前移动了。假定foreach循环运行到结束,原数组的内部指针将指向数组的结尾。另外foreach不支持用“@”来禁止错误信息。

  1. break语句跳出循环体,可以终止当前的循环,即还没有循环到的地方不会再执行(包括while,do…while,for,foreach和switch),另外break还可以跳出几重循环,给是为“break n;”。
    示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
while(1){
for(;;){
for($i=1;$i<=4;$i++){
echo $i."\t";
if($i==3){
echo "<p>变量\$i等于3,跳出第一重循环<p>";
break 1;
}
}
for($j=1;$j<5;$j++){
echo $j."\t";
if($j==4){
echo "<p>变量\$j等于4,跳出最外重循环<p>";
break 3;
}
}
}
}
?>

示例说明:当i=3时,跳出一重循环,当j=4时跳出3重循环,即跳出所有的循环。

continue语句跳出本次循环,即本次循环体不执行,但是不跳出当前循环,不会影响下次循环的执行。

  1. 函数名称不区分大小写(常量和变量区分大小写)。如果误定义了两个不同大小写的重名函数,那么程序将中止运行。
    还有一些函数命名有通用规则,如获取数值用get开头,然后跟上要获取的对象名字;设置数则用set开头,然后跟上要设置的对象的名字。
    关于return:因为return()是语言结构而不是函数,所以仅在参数包含表达式时才需要用括号括起来。当返回一个变量时通常不用括号,也不建议用,这样可以减少php的负担。
    当用引用返回值时,永远不要使用括号。只能通过引用返回变量,而不是语句的结果。如果使用“return($a);”,其返回的不是一个变量,而是表达式($a)的值,当然,此时该值也正是$a的值。(暂时不懂……)

  2. 变量函数不能用于语言结构,例如,each(),print(),unset(),isset(),empty(),include(),require()以及类似的语句,它需要使用自己的外壳函数来将这些结构用作变量函数。

  3. 转义和还原字符串:addslashes()和stripslashes()。
    addslashes()可以给字符串加入斜线“\”,然后对指定字符串中的字符进行转义。它可以转义的字符包括单引号“’”、双引号“””、反斜线”\“,NULL字符”0“。常用的地方就是在生成SQL语句时,对SQL语句中的部分字符进行转义。
    注意:所有数据在插入数据库之前,有必要应用addslashes()进行转义,以免特殊字符在插入数据库的时候出现错误。
    addcslashes()和stripcslashes()函数可以对指定范围内的字符串进行转义和还原。语法如下:
    string addcslashes(string str,string charlist)
    string stripcslashes(string str)

  4. substr()函数从字符串中按照指定位置截取一定长度的字符。如果使用一个正数作为子串起点,来调用这个函数,将得到从起点到字符串结束的这个字符串;如果使用一个负数作为起点,将得到一个原字符串尾部的一个子串,字符个数等于给定负数的绝对值。语法如下:
    string substr(string str,int start[,int length])
    str为指定字符串,start开始截取的位置,length指定了截取字符的个数,若为负数,则表示取到倒数第length个字符。

例子,现在有$str=’abcde’,遂有以下的值:

1
2
3
4
substr($str,0,3)=='abc'
substr($str,-3,3)=='cde'//从倒数第3个字符往后取3个字符
substr($str,0,-3)=='ab'//从第0个字符开始往后取,一直取到倒数第3个字符前一个字符为止。
substr($str,1,3)=='bcd'
  1. strlen()获取字符串长度。

  2. explode()用来分割字符串,语法:
    array explode(string separator,string str[,int limit])

    参数 说明
    separator 必要参数,用于指定分隔符。如果separator为空字符串"",explode()函数将返回false。如果separator所包含的值在str中找不到,那么explode()函数将返回包含str单个元素的数组
    str 必要参数,指定将要被分割的字符串
    limit 可选参数,如果设置了limit参数,则返回的数组中最多包含limit个元素,而最后的元素将包含string的剩余部分。如果limit参数是负数,则返回除了最后的-limit个元素外的所有元素

    implode()可以用来将数组中的元素合并成字符串,语法如下:
    string implode(string glue,array pieces)
    glue是字符串类型,用于指定分隔符,pieces是数组类型,即要被合并的数组。

这是《jQuery入门教程笔记》的第九篇,这篇继续讲关于节点的内容,并且将会在这篇中结束jQuery操作DOM这部分内容。 一、插入节点 插入节点分为内部插入节点方法和外部插入节点方法。内部插入节点的意思就是说在元素的内部插入一个新的元素,那么显然外部插入节点方法就是在元素的外部插入一个新的元素。详细见下面两个表格:

先来看看内部插入节点

语法格式 参数说明 功能描述
append(content) content表示追加到目标中的内容 向所选择的元素内部插入内容
append(function(index,html)) 通过function函数返回追加到目标中的内容 向所选择的元素内部插入function函数所返回的内容
appendTo(content) content表示被追加的内容 把所选择的元素追加到另一个指定的元素集合中
prepend(content) content表示插入目标元素内部前面的内容 向每个所选择的内容内部前置内容
prepend(function(index,content)) 通过function函数返回插入目标元素内部前面的内容 向所选择的元素内部插入function函数所返回的内容
prependTo(content) content表示用于选择元素的jQuery表达式 将所选择的元素前置到另一个指定的元素集合中
这里补充一个我的总结:
x.append(y) 在x中插入y y.appendTo(x) 把y插入到x中

接下来是外部插入节点before(content)content表示插入目标元素外部前面的内容向所选择的元素外部后面插入内容insertAfter(content)content表示插入目标元素外部后面的内容将所选择的元素插入另一个指定的元素外部后面

语法格式 参数说明 功能描述
after(content) content表示插入目标元素外部后面的内容 向所选择的元素外部后面插入内容
备注:表中的三个方法都支持function做参数,即用function来代替content。

二、复制节点 在页面中,有时需要将某个元素节点复制到另外一个节点后,如购物网站中购物车的设计。在传统的javascript中,学要写较为复杂的代码,而用jQuery,可以通过clone()轻松实现。 clone()有两种用法,一种是不加参数,一种是加true参数。区别在于:clone()复制匹配的DOM元素并且选中复制成功的元素,该方法仅是复制元素本身,被复制后的新元素不具有任何元素行为。如果想把元素的全部行为都复制,则需要使用clone(true)实现。 示例:

1
2
3
4
5
$(function(){
$("img").click(function(){
$(this).clone(true).appendTo("span");
});
});
备注:该句代码的意思就是当单击img元素的时候,复制该元素并加入到span中去。

三、替换节点 有两种方法: 1、replaceWith(content),该方法的功能是将所有选择的元素替换成指定的HTML或DOM元素,其中参数content为被所选择元素替换的内容。 2、replaceAll(selector),该方法的功能是将所有选择的元素替换成指定selector的元素,其中参数selector为需要替换的元素。 示例:

1
2
3
4
$(function(){
$("#Span1").replaceWith("<span>domyself.me</span>");
$("<span>domyself.me</span>").replaceAll("#Span2");
});
备注:#Span1和#Span2是被替换的元素,请注意替换顺序,另外请注意一旦完成替换,被替换元素中的全部时间都将消失。

四、包裹节点 在jQuery中,不仅可以通过方法替换元素节点,还可以根据需求包裹某个指定的节点,对节点的包裹也是DOM对象操作中很重要的一项,其与包裹节点相关的全部方法如下表:

语法格式 参数说明 功能描述
wrap(html) html参数为字符串代码,用于生成元素并包裹所选元素 把所有选择的元素用其他字符串代码包裹起来
wrap(elem) elem参数用于包装所选元素的DOM元素 把所有选择的元素用其他DOM元素包装起来
wrap(fn) fn参数为包裹结构的一个函数 把所有选择的元素用function函数返回的代码包裹起来
unwrap() 无参数 移除所选元素的父元素或包裹标记
wrapAll(html) html参数为字符串代码,用于生成元素并包裹所选元素 把所有选择的元素用单个元素包裹起来
wrapAll(elem) elem参数用于包装所选元素的DOM元素 把所有选择的元素用单个DOM元素包裹起来
wrapInner(html) html参数为字符串代码,用于生成元素并包裹所选元素 把所有选择的元素的子内容(包括文本节点)用字符串代码包裹起来
wrapInner(elem) elem参数用于包装所选元素的DOM元素 把所有选择的元素的子内容(包括文本节点)用DOM元素包裹起来
wrapInner(fn) fn参数为包裹结构的一个函数 把所有选择的元素的子内容(包括文本节点)用function函数返回的代码包裹起来
示例:
1
2
3
4
$(function(){
$("p").wrap("<strong></strong>");//所有段落标记字体加粗
$("span").wrapInner("<em></em>");//所有段落中的span标记斜体
});
备注:该代码的执行效果是在

domyself.me

的外面加上,即查看源代码时显示的是

domyself.me

,另一句代码的执行效果则是在domyself.me的内部加入,即执行后的效果为,domyself.me

五、遍历元素
在DOM元素操作中,有时需要对同一标记的全部元素进行同一操作。在传统的javascript中,先获取元素的总长度,然后,以for循环依次访问其中的某个元素,代码相对复杂,而在jQuery中,可以直接使用each()方法实现元素的遍历,语法如下:

each(callback)

参数callback是一个function函数,该函数还可以接受一个形参index,此形参为遍历元素的序号(从0开始);如果需要访问元素中的属性,可以借助形参index,配合this关键字来实现元素属性的设置或获取。 示例:

1
2
3
4
$("img").each(function(index){
//根据形参index设置元素的title属性
this.title = index;
});

六、删除元素
两种方法:
remove(),语法格式为remove([expr]),其中参数expr为可选项,如果接受参数,则该参数为筛选元素的jQuery表达式,通过该表达式获取指定的元素,并进行删除。
empty(),其功能为清空所选择的页面元素或所有的后代元素。

用wordpress有段时间了,总结了一点小经验,要想网站被多收录的话,确实需要下一番功夫,推广是必不可少的,但是从我们自身网站结构来说,也有一定的技巧吧,观察了几个网站,在关键字设置上,发现一点:每个文章页面的关键字和描述都是不同的。很值得借鉴,怎么不同呢?首页的关键字和描述是固定的,但是文章页面的关键字是当前文章的标签、描述则是是文章的前100字(可以设置长度)。这样的话,更利于搜索引擎搜索了。

于是乎,这篇文章就诞生啦!

其实很简单,如果你设置了网站关键字的话(手动添加),我已经把代码整理好了

步骤1 :打直接修改源文件(header.php)也好,或者登录后台修改:外观-编辑-选择修改(顶部)header.php文件。

找到代码:(作用:设置关键字)

替换为:

ID);foreach ($tags as $tag ) {$keywords = $keywords . $tag->name . ", ";}echo $keywords;}else{echo ("这里是你网站首页的关键字...");} ?>" />

找到代码:(作用:设置描述)

替换为:

" />

步骤2 :点击“更新文件”保存设置。

这样就OK啦!打开一个文章页面,鼠标右键,查看源文件,看看效果吧!应该会对对收录有好处。

来源:浮云站www.fuyunz.com 原创教程转载注明出处!

这是《jQuery入门教程笔记》的第八篇,这篇讲的是创建节点元素。

函数$()用于动态创建页面元素,其语法如下:

$(html)

其中,参数html表示用于动态创建DOM元素的HTML标记字符串,即如果要在页面中动态创建一个div标记,并设置其内容和属性,可以加入如下代码:

var $div=$(" > > Domyself > > "); $("body").append($div);
阅读全文 »

这是《jQuery入门教程笔记》的第七篇,这一篇将开始新的一章,操作DOM。

对于DOM的解释:当我们创建一个页面并加载到Web浏览器时,DOM模型则根据该页面的内容创建了一个文档文件;单词Object即对象,是指具有独立特性的一组数据集合,例如,我们把新创建的页面文档称之为文档对象,与对象相关联的特征称之为对象属性,访问对象的函数称之为对象方法;单词“Model”即模型,在页面文档中,通过树状模型展示页面的元素和内容,其展示的方式则是通过节点(node)来实现的。让我们来看个例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>
<title>DOM演示</title>
<style type="text/css">
body{
font-size:13px;
}
table,div,p,ul{
width:280px;
border:solid 1px #666;
margin:10px 0px;
padding:0px;
background-color:#eee;
}
</style>
</head>

<body>
<table>
<tr>
<td>Td1</td>
</tr>
<tr>
<td>Td2</td>
</tr>
</table>
<div>Div</div>
<p>P</p>
<div>
<span>Span</span>
</div>
<ul>
<li>Li1</li>
<li>Li2</li>
</ul>
</body>
</html>

一、访问元素

叙述 方法 语法
元素属性操作 获取和设置元素属性:attr()

删除某一属性:removeAttr()

获取:attr(name)

例如:$(“img”).attr(“src”)//获取img标签的src属性值

设置:attr(key,value)//key表示属性的名称,value表示属性的值,当value是函数的时候,函数的返回值将作为value值

attr(key0:value0,key1:value1)//可以一次设置多组

例如:$(“img”).attr(“title”,”domyself”)

$(“img”).attr(title:”domyself”,src:”/images/1.jpg”)

删除:removeAttr(name)

例如:$(“img”).removeAttr(“src”);

元素内容操作 html()和text() 1、html(),用于获取元素的HTML内容

2、html(val),用于设置元素的HTML内容

3、text(),用于获取元素的文本内容

4、text(val),用于设置元素的文本内容

说明:html()方法仅支持XHTML的文档,不能用于XML文档,而text()则既支持HTML文档,也支持XML文档。

获取或设置元素值 val(val)

val().join(“,”)

获取:val(),相当于attr("value")的作用

使用val().join(“,”)可以获取一组值,并用“,”隔开,分隔符可以更换

赋值:val(val),val可以为数组

元素样式操作 css(name,value)

addClass(class)

toggleClass(class)

removeClass([class])

css(name,value),直接修改某项css的值

addClass(class),添加一个class类别,可以用英文逗号隔开添加多个

toggleClass(class),当元素中含有名称为class的CSS类别时,删除该类别,否则增加一个该名称的CSS类别

removeClass([class]),如果不给参数则是清空所有class,可以添加多个class,需要用逗号隔开

鲁大学生网,前身是鲁东大学学生委员会网络信息部,这里有着我大学四年的大部分记忆,从大一加入,到大二大三工作,一直到现在大四了,即使退出管理但依旧还在关注着这个团队~一点一滴真的是在这个过程中结识了很多好朋友,学到了很多技能。我感谢这个团队,希望这个团队所向披靡~

这里就贴一段学生网正式上线时,在发布会现场放的一段视频,这里面有06级、07级学长学姐的面孔,也有我们08级的面孔,还有之后09和10级的童鞋们~

We’re all in this togther!

更多回忆,来看这里:http://sailboat.ldustu.com/2010/12/7.html

这是《jQuery入门教程笔记》的第六篇,这一篇将会作为选择器这部分的一个综合案例。对于选择器,还有几类在之前的笔记中没有提到,这些大家可以百度下,都是能百度的到的。之前笔记略过的部分有:子元素过滤选择器,表单对象属性过滤选择器,表单选择器。

现在开始这一篇的内容,这个综合案例实现的是一个导航条,效果是,单击标题时,可以伸缩导航条的内容,同时,标题中的提示图片也随之改变,另外,单击“简化”链接时,隐藏指定的内容,并将“简化”字样改变成“更多”,单击“更多”链接时,返回初始状态,并改变指定显示元素的背景色。

以下是源代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>导航条在项目中的应用</title>
<script language="javascript" type="text/javascript" src="jquery-1.4.2.min.js"></script>
<style>
body{
font-size:13px;
}
#divFrame{
border:solid 1px #666;
width:301px;
overflow:hidden;
}
#divFrame .clsHead h3{
padding:0px;
margin:0px;
float:left;
}
#divFrame .clsHead span{
float:right;
margin-top:3px;
}
#divFrame .clsContent{
padding:8px;
}
#divFrame .clsContent ul{
list-style-type:none;
margin:0px;
padding:0px;
}
#divFrame .clsContent ul li{
float:left;
width:95px;
height:23px;
line-height:23px;
}
#divFrame .clsBot{
float:right;
padding-top:5px;
padding-bottom:5px;
}
.GetFocus{
background-color:#eee;
}
</style>
<script type="text/javascript">
$(function(){ //页面加载事件
$(".clsHead").click(function(){ //图片单击事件
if($(".clsContent").is(":visible")){ //如果内容可见
$(".clsHead span img")
.attr("src","Images/a1.gif"); //改变图片
//隐藏内容
$(".clsContent").css("display","none");
}else{
$(".clsHead span img")
.attr("src","Images/a2.gif"); //改变图片
//显示内容
$(".clsContent").css("display","block");
}
});

$(".clsBot > a").click(function(){ //热点链接单击事件
//如果内容为“简化”字样
if($(".clsBot > a").text() == "简化"){
//隐藏index号大于4且不是最后一项的元素
$("ul li:gt(4):not(:last)").hide();
//将字符内容更改为“更多”
$(".clsBot > a").text("更多");
}else{
$("ul li:gt(4):not(:last)")
.show()
.addClass("GetFocus");//显示所选元素且增加样式
//将字符内容更改为“简化”
$(".clsBot > a").text("简化");
}
});
});
</script>
</head>
<body>
<div id="divFrame">
<div class="clsHead">
<h3>图书分类</h3>
<span><img src="Images/a2.gif" alt="" /></span>
</div>
<div class="clsContent">
<ul>
<li><a href="#">小说</a><i>(1110)</i></li>
<li><a href="#">文艺</a><i>(230)</i></li>
<li><a href="#">青春</a><i>(1430)</i></li>
<li><a href="#">少儿</a><i>(1560)</i></li>
<li><a href="#">生活</a><i>(870)</i></li>
<li><a href="#">社科</a><i>(1460)</i></li>
<li><a href="#">管理</a><i>(1450)</i></li>
<li><a href="#">计算机</a><i>(1780)</i></li>
<li><a href="#">教育</a><i>(930)</i></li>
<li><a href="#">工具书</a><i>(3450)</i></li>
<li><a href="#">引进版</a><i>(980)</i></li>
<li><a href="#">其他类</a><i>(3230)</i></li>
</ul>
<div class="clsBot"><a href="#">简化</a>
<img src="Images/a5.gif" alt="" />
</div>
</div>
</div>
</body>
</html>

1、如果一个方法能被静态,那就声明他为静态的,速度可提高1/4;

2、echo的效率高于print,因为echo没有返回值,print返回一个整型;

3、在循环之前设置循环的最大次数,而非在在循环中;

4、销毁变量去释放内存,特别是大的数组;

5、避免使用像__get, __set, __autoload等魔术方法;

6、requiere_once()比较耗资源;

阅读全文 »
0%