Ipan笔记-2
其实二级联动下拉选择框很简单的, 参考: https://www.cnblogs.com/zhangmiaomiao/p/6013533.html
==============
关于$.each和 $().each()的区别
-
前者可以遍历任何对象或数组, 后者只能遍历jquery的对象数组;
-
后者由于已经明确指出了被遍历的对象, 因此,each后面的参数就只有一个, 即回调函数了,而前者由于没有指明被遍历的对象,所以第一个参数是 被遍历的数组或对象,第二个参数才是回调函数
-
既然是遍历,在后面的callback函数中的参数,就是直接、已经从被遍历的对象、数组中取出来的子元素了,不再是原来的对象或数组
-
如果是遍历数组, 则回调函数中的第一个参数是元素的下标索引数字,从0开始, 比如: 0,1,2...第二个参数是数组元素的值; 如果是遍历的对象,比如: {name:‘jack’,age:20,address:‘some place'} 则回调函数中的第一个参数不再是下标数字了,(对象没有下标的概念)表示的是 对象中成员变量的名称即: mem_name, 比如:name, age, address.第二个参数是成员变量的值,比如: jack,20,...
-
这个遍历中, 类似for或 while结构, 但是循环的控制, 不再是用break或 continue, 而是用 return false=break,或 return true=continue来控制。
<script>
var arr=[1,3,5];
var obj={name: 'jack', age: 20, address: 'Street Lincon'};
$.each(arr, function(i, x){
alert("this is " +i +" element and value is: " + x);
});
$.each(obj, function(mem_name, mem_value){
alert("this is '" + mem_name +"' element and value is: " + mem_value);
});
</script>
ajax中的 $.get(), 和 $.getJson()的区别?
其实两者都是差不多的,只是前者由于没有指明服务器返回数据的类型,所以要在最后一个参数中指明’json’,而后一个函数由于已经明确说了 getJson, 所以就不用写返回类型了, 最多就是三个参数。
** jquery中的val函数,是一个专门的函数,就是用来获取表单中各种输入控件的值。比如select选择框的值:$('select').val()
**
$(...).remove和empty的区别?
\((...).remove从字面上的意思,就可以知道, 它是要 (从dom树节点上)删除 被匹配的元素(集合)本身! \)(...).empty, 被匹配的元素,本身不会被删除,只是会清空(删除)它的所有子节点。
同时,要注意, 很多jquery函数的使用方法,比如: $('...').func_name(...)本身可以不带参数, 那么所有被匹配的元素节点都要执行func_name的动作, 也可以在func_name中 指定 过滤选择器, 那么就只是从 匹配元素集 中 再次选择过滤一次, 然后执行动作。
=======================
jquery中的方法(函数)调用, 是要传递一个参数, 比如:change等, 函数参数不能是 一个语句. 但是可以是 一个 匿名函数: $('select').change(funciton(){...} );
jquery中如何判断一个元素是否显示出来了? (是否存在?) 使用 is 函数 $('selector').is(":visible");
===============
jquery中的事件 和 dom元素的事件的 区别?
- dom元素绑定事件的时候, 原生态的用onclick之类的.
- 而jquery中的绑定事件, 用的是 click函数 注意此时就不再加on了.
事件和方法的区别? 再次说一下:
- 方法是 调用的时候, 马上就执行!
- 而事件是一种伺服机制, 写上事件函数的时候, 函数并不会马上执行, 只有当相应的事件发生时, 函数才会执行. 要注意, jquery中的 click() 是事件而不是马上就会调用的方法!
jquery中的is函数非常重要: is(selector|obj|element|function)
is函数的参数 可以有4种:
- selector, 判断前面的对象, 是不是 符合 参数指定的 选择器(基本上是 冒号选择器), 可以是 所有的选择器, 比如 :visible, :hidden, :input等等
- obj, 是一个jquery对象
- 元素, 判断是不是一个dom元素
- 函数: 当对每个循环元素进行is 判断的时候, 不是为了 判断这个对象是什么, 而是要 判断 某个 事实, 某种情况的时候, 就可以 使用 function...., 然后在function中 通过return 返回false或true...
data-toggle 和datat-target作用
toggle是切换的, 表示 该元素 要去控制什么动作,
target是目标, 表示该元素控制的 是哪个目标的 动作
比如 li或 a, 的属性data-toggle是控制其他元素的collapse切换动作. 那么是控制 哪个元素的 collapse动作呢, 通过在 li/a 中指定 data-target来确定
所以 被控制的div 必须要有 collapse 类样式, 而其中的 in 类样式, 表示 进入 打开的意思, 在初始的时候, 是折叠的还是显示的.
折叠可以是针对单个的div, 也可以是 一组/多个div对象的相互折叠, 这个就是 手风琴/折叠面板组, 这个时候, 就要指定每个可折叠 div的 父元素 data-parent.
easyui中 , 要使用图标, 采用的样式类是 iconCls, 这个是通用的, 在整个easyui中都是这样应用的: 在tabs标签组中, 要只是显示标签title, 不要 标签后面的条块(背景) 就使用 选项: plain: true.
===========================
mysql的describe命令
- mysql中的命令 通常没有省略的, 不可以省略, 是 完整的 动词;
- describe 后面直接跟 "表名table_name", 不需要 关键字 table
- describe是 "show columns from .." 的简写
**php中的变量定义: **
= 凡是在$ 符号后面紧跟一个字符串, 就认为是一个php变量;
= php不像c语言, 不支持 给变量: 只定义 不赋值, 赋值初始化的时候, 就是给变量定义了
= php支持 "可变变量" 即: 两个$ $$var
变量的值, 是另一个变量的名字
= 不能像C, javascript等语言一样, 在一行内定义多个 变量, 只能一行定义一个 变量! 即$a=1,$b =2 ;
是错误的
在tp中引入js和css文件
不再使用link和script标签, 直接使用load标签href属性, load标签会自动根据href文件的扩展名来判断类型, 而js和 css是load标签的别名, 语义更清晰.
注意css中 表示 层级 关系 的 几个单词的区别
parent和 child 是父母 和 子女的意思: child 除了小孩这种 广义的泛指之外, 还表示 "自己的子女"!! 所以表示 父子/父母和子女, 不用father/son, 而是用 parent 和 child
ancestor & decendant是 祖先 和 后代/后裔的关系, 不一定是 父母/子女这种直接一代的关系, 可以 所有的 隔了多代的关系.
previ+Next 表示 上一个和下一个, 就是它们之间必须是紧挨着的(当然,而且它们的层级是一样的, 都有共同的父辈parent)
prev~siblings, 表示的是 A元素 后面的 所有同辈, 在层级上是一样的, 都有相同的parent, 但是它们的顺序不一定是紧挨着的. 所以 ~sibling是包含+的, + 是~siblings的特例
jquery的文档说得很清楚, 表示层级关系的就只有这四种:
A B 表示 祖先 子孙 (包括子辈和孙辈...)
A>B表示 父母和子女
A+B表示A后面的 紧挨着的兄弟元素;
A~B表示 A后面的 同辈元素(不一定是紧挨着的)
需要注意的是, 在所有的 层级关系中, 最后选出来的 元素, (样式应用的对像是 B , 不会应用的A元素上) : 都 "落脚于" 后面的那个元素 B 上, 所有的 B元素 都是 A元素 的位置之后的 , 即:都表示: A 后面的 元素B 将要应用的样式! 因为这里使用的是 Prev (这个Prev是前面的, 就表明了它们之间的 在位置上 的 先后关系! ) + 和 ~ 的兄弟元素和 同辈元素 是不包括该元素 前面的 元素的!
所以 使用 加号表示兄弟元素 , 可以起到一些特殊的 选择作用, 比如: <style> li+li{....} 表示 li元素后面 的紧邻 那个li元素将要应用的样式
通常 在多个相同元素中使用 加号 , 会让中间元素应用样式, 但是 第一个元素和最后一个元素 不会被 应用样式, 因为第一个元素之前没有其他元素, 最后一个元素之后没有兄弟元素.
要选出 第一个 子元素. 不能使用 层级 选择符. 因为层级选择符 选出的都是 集合. 是符号条件的所有元素. 所以 要选择第一个 或第一个子元素 , 要使用 冒号选择器(也叫 伪类选择器, 因为 伪类 就是用冒号来表示的 比如 :class) 即 : :first, :first-child, :last-child
======================
css中的 float和position的区别?
- bfc( "谐音:不服从") 表示的是 块级元素 格式化上下文, 表示 html中元素的排列顺序, 总是 块级元素从上到下, inline元素 从左到右
- float是浮动, 是 属于排版 "图文混排"的语义,
- position是真正的定位, 要实现 一个元素 b 相对于另一个元素A位置内 定位, 必须要求 父元素 A必须为 position: relative , 不能是static.
- 正因为, 它们都能在一定程度上 实现相同的效果, 所以 容易混淆 它们的区别, 在于 是否从 文档流中 脱离.
但是: 不管是 float 还是 position, 都不能 忽略 位于 它们前面的 块级元素, 比如h2, div等 , 这些div或 h2等块级元素由于 要占据 整个整行, 会将它们 挤下来... 因此 就 只能排列在这些块级元素的下面!
=================
要清楚php进行 json编码的规则:
- 如果是 一维数组(没有索引名称的), 则直接编码为 json 数组 , 比如:
[1, 2, 3, 'name', true]
- 如果是一维数组而且 有索引名称的, 则编码为 json 对象, 其中 索引名称为键名, 比如:
{'name': 'jack', 'age': 10, 'addr': 'st2'}
- 如果是二维索引数组, 则编码为json数组, 同时每个元素为一个json对象
[{'name': 'jack', 'age': 10, 'addr': 'st2'}, {'name2': 'jack', 'age': 10, 'addr': 'st2'}, ...]
- 如果是单个的数字 或 字符串, 编码后, 还是单个的数字或字符串, 不会改变.
- 可以在调试时, 开始不忙传递数据进去, 看最简单的情况下, 能不能ajax成功, 就可以看到 是否将ajax请求传递到 后台页面了
function name must be a string? 是说 当我们错误地把 全局变量 , 比如 $_POST, \(_COOKIE,\)_GET等的元素, 本来应该是 中括号的, 却错误地写成了小括号, 比如:$_post('name') 那么: 因为后面有括号, 首先把它当做是一个函数 调用, 而前面的 \(_post 又是以\)开头的, 就认为是一个变量, 而变量是不能做函数名的, 必须是用字符串来做函数名
在ajax 的后台处理页面php中, 确实是用 $_POST['name']之类的 来接收 ajax传递过去的数据的, (当然ajax type是post的). 是能够正确的取到的, 如果要查看, 或怀疑数据没有传递过去, 或传递有问题, 你可以直接将 接收到的数据 直接组装成 json结果反回来在 js 控制台查看.
传递的数据 , 确实是写成 js 键值对 对象 形式!
为什么在$.ajax应用中, 出现错误提示: jquery.js的第2行, TypeError: invalid in operand a?
- 这是由于在 ajax应用中,对从php返回的json数据进行处理时, 调用了jquery中的函数each函数, 而each函数要求的 "in"operand 输入操作数, 必须是一个 javascript的数组或对象.但是 从php返回的json数据 在js看来,只是一个 字符串!! 不是数组或对象. 所以会提示 TypeError
- 而这里调用的 each函数, 是jquery.js中的一个函数, 正好位于jquery.js文件中的第二行...
- 解决方法是: 将这个ajax返回的"字面上是对象" 的字符串, 转换为真正的js 数组或对象,方法是: 用javascript语言本身提供的 "JSON"对象的相关方法:
JSON.parse(json_format_string) => 得到js的数组或对象
, 而JSON.stringify(js字母对象) => Json格式的字符串
// javascript中的ajax语句
$.post('/index.php/Home/Index/ajaxHand',{'zyb':zyb,'nj':nj},function(ajaxRet){
.....
var res = JSON.parse(ajaxRet);
console.log('返回结果:'+res);
});
// 控制器中的方法 ajaxHand
public function ajaxHand(){
$zyb = $_POST('zyb');
$nj = $_POST['nj'];
$Class = M('class');
$res = $Class -> where(array('zyb'=>$zyb, 'nj'=>$nj)) -> getField('bj',true);
echo json_encode($res);
}
localhost 和 127.0.0.1的区别? 参考 https://blog.csdn.net/JkunZhang/article/details/6066158
- localhost叫 本地 服务器, 而 127.0.0.1 是本机 服务器ip地址.一个叫 本地, 一个叫 本机, 两者通过host文件进行 转换.
- localhost 不经过网卡, 不受防火墙和网卡ip地址等的限制; 127.0.0.1 是一个ip地址, 要经过网卡, 要受防火墙和网络地址的限制;
- localhost不会占用网络资源? 127.0.0.1 和其他ip地址的区别是, 前者 只能通过本机访问, 后机器的本机ip地址 可以从 其他机器访问;
- 建议通过localhost来访问, 因为 使用 localhost来访问, 是 以当前 本地用户的(控制台的用户) 身份来访问的; 而ip地址访问是以 访客 身份来访问的.
- 在windows下 localhost 的访问协议 是 TCP/ip 而linux下是 通过 unix socket 套接字来访问的. 所以 有时候会出现 localhost不能访问, 而127地址可以访问的现象,但是 win上没有这种情况.
==========================================
mysql中的 mysql.user表中存放的是 当前 数据库中 有哪些用户, 以及它们的权限等信息, 而 information_schema数据库是存放的当前 运行的 数据库/表的 信息, 是从其他数据库(主要是mysql数据库)中提取信息的 "视图", 所以 很多表 没有 真实的/对应的实体文件. 其中的 information_schema. user_privileges表是存放的当前 内存中, 已经运行的 用户信息和权限.
- 由于 mysql中 有一个 默认的 普通用户, 是 匿名用户, 是 空'' 用户 :
''@'localhost'
是 很低的用户, 它只有 usage的功能和操作 (只能操作 test数据库) , 没有 grantable, 所以 只能用来 操作 普通的用户自己的数据库, 不能操作 其他系统 数据库. 包括 一般不能创建 新的 数据库等.