猿小二
右侧好理解 左侧就是非非 应该是老师前面定义的吧
慕的地2528051
判断是不是元素节点
慕粉3339437
知道了,是代码的function打错拉,谢谢解答
慕的地2528051
script应该放在最后运行即可. 因为解析顺序由上而下, 此时并没有加载上id为test的div
Blizzard_lihe
ctrl+/就可以
荔枝小时
好像是为了兼容ie浏览器
Even何斌
try{
testDiv.appendChild(obj); //把要检验的obj作为子节点添加给testDiv节点
testDiv.removedChild(obj);//把testDiv中为obj的子节点移除
}catch(e){
return false;//如果以上两者运行中有错误则返回false
}
比如你传入的是变量a 但是变量a不是一个节点元素,所以就不能作为节点被添加到testDiv中或者被删除,则会返回false,而如果a是被createElementNode(’a‘)之后,则这个a就是一个被创建的元素节点,可以被添加到任何一个元素节点作为子节点或者被删除,而案例中多出这一步检验也是因为当你使用isElement这个方法检验obj是不是一个元素节点的时候容易出错,也就是可以把一个声明中有nodetype=1的json对象也当做成元素节点,很显然这个方法不严谨也不符合检测的目的,所以才要检测真假:【如果obj本身就是元素节点,则就必然可以作为子节点被添加和被删除,则返回判断结果为真!
如果obj本身是有声明过nodetype=1的json对象,即使obj在第一层if判断中nodetype=1通过,则第二层检测到他不能作为子节点被添加和被删除,则obj必然不是元素节点,返回判断结果为假!】
糖果罐
因为如果 代码出错,整个程序就会停止,他代码放到try里 能正确执行就会正确执行,如果报错就会进入catch里面,代码还是会向后执行。不会影响整个程序。如果直接放到if里的话 if里的代码报错就算结束了 else里的return false是不会执行的。
superli18
因为 && 是短路运算符
obj&&obj.nodeType === 1
的意思就是 obj 存在,并且 obj.nodeType === 1 if里的整个表达式才为true, 如果说 obj 不存在,他的值就是undefinde ,if(obj) 就直接返回false了 不会再对后面的obj.nodeType === 1 进行判断了。如果不加obj&& 直接写成 if(obj.nodeType === 1) 这时obj不存在的话就会报错,undefinde 是不可以调用属性的 obj.nodeType 就会报错
偏爱花开的声音
这句话这么解释,window.Node,是查看window里是否有这么一个Node对象,然后obj instanceof Node是说明obj是否是Node对象的一个实例,即是不是new Node出来的,满足了这两个条件,obj就是Node类型
海贼王2015
海贼王2015
window.Node:
DOM1 级定义了一个 Node 接口,该接口将由 DOM 中的所有节点类型实现。这个 Node 接口在
JavaScript 中是作为 Node 类型实现的;除了 IE 之外,在其他所有浏览器中都可以访问到这个类型。
JavaScript 中的所有节点类型都继承自 Node 类型,因此所有节点类型都共享着相同的基本属性和方法。
老徐不二
!!el 为了使el 强制转换 为布尔(boolean)类型 true 或 false;