js相关笔记(十)

1.禁用文本框 可以使用disabled属性,但是使用了disabled属性后提交表单时会出现提交的成员中没有这个文本框,所以禁用文本框可以使用 readonly属性,表单提交会提交设置了readonly属性的表单而不会提交设置了disabled属性的表单。


2.在函数中使用this,函数加载时只加载函数名不加载函数体,所以谁调用了当前的函数,这个this就指向谁,行内绑定事件的方式使用的是第三种定义函数的方式,new Function("fn();");,使用这种方式导致调用者不再是当前事件源,而是window对象,如同是在一个匿名函数体里面添加了一段window.fn();,如:function(){window.fn();}这样的代码,所以此时的this不再代表当前事件源,所以如果使用行内事件绑定时,记得要把当前对象传递进去,如<input type="text" oninput="fn(this);"> ,这样可以在函数里面使用当前对象了,是通过参数方式使用当前事件源对象的。


3.设置option标签的selected属性时注意,当点击选中某一项时  设置这个option的selected属性为 true; 当点击不选中某一项时 就设置 设置这个option的selected属性为 false; 但是这种做法在IE678中无效 ,只能设置不能取消 ,就算你 使用操作属性的方法 getAttribute()、setAttribute()、removeAttribute() 在IE678中也无效, 所以你如果想取消当前选中那一项时可以设置其它项为选中的项,那么默认会取第一个设置为selected的选中项,然后会取消其它设置为selected的项。


4.在webstrom中新建文件时,如果文件名中带有 / 斜杠的话,会进行层级目录的创建  如你创建了一个 get/set/remove.html ,那么实际创建的是一个get文件夹下包含了一个set文件夹,然后set文件夹下有一个remove.html的文件。


5.数组中的push方法,是将新添加的元素添加到最后面,配套的pop方法,是将最后面的元素取出来并且从原数组中移除取出来的元素。


6.排他思想,先清除掉全部的,然后再添加自己的。


7.使用对象的操作属性的方法来添加或者获取及删除时,要以页面标签实际的属性为主,而通过对象的操作属性 对象.属性或者对象["属性"]时,要以页面标签转换为对象后的对象的属性为主,如页面标签转换后的class属性不再是class属性了,而是className,但是使用getAttribute()/setAttribute()/removeAttribute()时,是以页面的标签明码显示的属性为主,如获取class属性则是对象.getAttribute("class");而不是对象.getAttribute("className");,设置与删除也是如此。


8.通过访问关系获取节点的方式:
◆直接获取当前节点:document.getElementById("id");也能通过类名 标签名 名字 来获取
◆间接获取上一个兄弟节点:当前节点.previousElementSibling,但是这种获取的方式在IE678中不支持,因为在IE678中使用的是当前节点.previousSibling,可是随着时代的更新,节点的类型增多,比如元素节点啊、属性节点、文本节点等等,所以当前节点.previousSibling不但可以获取元素节点还有可能会获取到其它节点,于是一个新的属性previousElementSibling出现了,它用来专门获取元素节点,但是为了兼容IE678,所以需要采取一个新的写法,如:var pre=当前节点.previousElementSibling || 当前节点.previousSibling;,这样表示,如果IE678访问则会使用当前节点.previousSibling,否则就使用当前节点.previousElementSibling,通过||运算符,表面上是拿两个值作为bool值来进行逻辑判断,如果哪一边为true就会返回先为true的那一边的实际值。
◆间接获取下一个兄弟节点:当前节点.nextElementSibling,但是这种获取的方式在IE678中不支持,因为在IE678中使用的是当前节点.nextSibling,可是随着时代的更新,节点的类型增多,比如元素节点啊、属性节点、文本节点等等,所以当前节点.previousSibling不但可以获取元素节点还有可能会获取到其它节点,于是一个新的属性nextElementSibling出现了,它用来专门获取元素节点,但是为了兼容IE678,所以需要采取一个新的写法,如:var pre=当前节点.nextElementSibling || 当前节点.nextSibling;,这样表示,如果IE678访问则会使用当前节点.nextSibling,否则就使用当前节点.nextElementSibling,通过||运算符,表面上是拿两个值作为bool值来进行逻辑判断,如果哪一边为true就会返回先为true的那一边的实际值。
◆间接获取父节点:当前节点.parentNode;表示获取当前节点的父节点
◆间接获取自己的第一个子节点:当前节点.firstElementChild,但是这种获取的方式在IE678中不支持,因为在IE678中使用的是当前节点.firstChild,可是随着时代的更新,节点的类型增多,比如元素节点啊、属性节点、文本节点等等,所以当前节点.firstSibling不但可以获取元素节点还有可能会获取到其它节点,于是一个新的属性firstElementChild出现了,它用来专门获取元素节点,但是为了兼容IE678,所以需要采取一个新的写法,如:var pre=当前节点.firstElementChild || 当前节点.firstChild;,这样表示,如果IE678访问则会使用当前节点.firstChild,否则就使用当前节点.firstElementChild,通过||运算符,表面上是拿两个值作为bool值来进行逻辑判断,如果哪一边为true就会返回先为true的那一边的实际值。
◆间接获取自己的最后一个子节点:当前节点.lastElementChild,但是这种获取的方式在IE678中不支持,因为在IE678中使用的是当前节点.lastChild,可是随着时代的更新,节点的类型增多,比如元素节点啊、属性节点、文本节点等等,所以当前节点.lastChild不但可以获取元素节点还有可能会获取到其它节点,于是一个新的属性lastElementChild出现了,它用来专门获取元素节点,但是为了兼容IE678,所以需要采取一个新的写法,如:var pre=当前节点.firstElementChild || 当前节点.lastChild;,这样表示,如果IE678访问则会使用当前节点.lastChild,否则就使用当前节点.lastElementChild,通过||运算符,表面上是拿两个值作为bool值来进行逻辑判断,如果哪一边为true就会返回先为true的那一边的实际值。
◆间接获取所有的子节点:当前节点.children,获取所有的元素节点 但是在IE678中还可能会获取注释节点,当前节点.childNodes,获取所有的子节点 ,会包括元素节点、属性节点、文本节点等等,需要自己使用循环来判断,取你想要的节点然后放到一个新的数组中去,比如把所有的元素节点放到一个数组中去。
★如果你像找到自己所有的兄弟节点,那么可以使用当前节点.parentNode.children,这个可以找到所有的兄弟元素节点,而当前节点.parentNode.childNodes,这个可以找到所有的兄弟节点,包括元素节点、属性节点、文本节点等等,可以自己使用for循环把想要的节点放到一个新的数组中去。


9.获取节点的名称、节点的类型、节点的值
◆获取节点的名称:当前节点.nodeName,节点分为很多种,元素节点的名称就是标签名,属性节点的名称就是属性名,文本节点的名称统一叫做#text。
◆获取节点的类型:当前节点.nodeType,节点分为很多种,元素节点的类型 是1,属性节点的类型是2,文本节点的类型是3。
◆获取节点的值:当前节点的.nodeValue,节点分为很多种,元素节点的值不是那个value属性而是nodeValue属性,默认元素节点的值都为null,属性节点的值为对应属性值,如果你获取的属性节点为value属性,那么对应的节点的值(nodeValue)就是value属性的属性值,如果你获取的属性节点是id属性,那么对应的节点的值则为id属性的属性值,文本节点的的值为对应的文本值,也就是纯文本。
★如果想获取元素节点的value属性的值,那么请先获取这个元素节点的对应的value属性节点,通过元素节点.getAttributeNode("value");来获取,然后通过获取属性节点的值(nodeValue)来获取value属性的值。

posted @ 2018-06-10 18:05  我叫贾文利  阅读(126)  评论(0编辑  收藏  举报