<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>是否是有效的dom节点</title>
<script type="text/javascript">
//是否是节点(body有效)
function isNode(elem) {
var ts = Object.prototype.toString;
var reg = /^(\[object HTML).*?(Element\])$/;
var str = ts.call(elem); //IE8下body会识别成[object Object]
if (reg.test(str)
|| (elem !== undefined
&& elem !== null
&& elem.nodeName !== undefined
&& elem.nodeName !== '#text'
&& elem.nodeName !== '#document')) {
return true;
} return false;
}
</script>
</head>
<body>
<ul>
<li>
列表节点
</li>
</ul>
<h4>单测结果输出:</h4>
<script type="text/javascript"> //简单测试框架
function test(testArr, expectArr, explain) {
var tStr;
for (var i = 0, len = testArr.length; i < len; i++) { if(explain && explain[i]){
tStr = explain[i] + ' -> ' + expectArr[i] + ':';
} if (isNode(testArr[i]) === expectArr[i]) {
tStr += '成功';
} else {
tStr += '失败';
} document.write(tStr + '<br />');
}
} // 对验证的说明
var explain;
//预期结果
var expect;
var ul = document.getElementsByTagName('ul')[0];
var childNodes = ul.childNodes;
if (childNodes.length == 3) {
expect = [false, true, false];
explain = [
'标准浏览器下childNodes获取的换行文本节点',
'标准浏览器下childNodes获取的Dom节点',
'标准浏览器下childNodes获取的换行文本节点'
];
} else {
expect = [true];
explain = ['IE下childNodes获取的Dom节点'];
}
test(childNodes, expect, explain); document.write('------------------------<br />'); var testArr =
[
document,
window,
document.body,
undefined,
null,
true,
false,
'' ,
0,
2 / 0,
new Number(3),
'str',
new String('str'),
new String('')
];
expect =
[
false,
false,
true,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false
];
// 对验证的说明
explain = [
'document',
'window',
'document.body',
'undefined',
'null',
'true',
'false',
'空字符串',
'数字0',
'NaN,如2/0',
'new Number(3)',
'str',
'new String("str")',
'new String("")'
];
test(testArr, expect, explain);
document.write('------------------------<br />'); //这种变态构造就管不了了
test([
{nodeName: 'DIV'}
], [false]); </script>
</body>
</html>

是否是有效的dom节点--轮子代码的更多相关文章

  1. 手动触发dom节点事件代码

    在爬代码过程中,碰到一个稀奇古怪的问题.需要手工修改select的值,然后手动触发select的change事件,但使用网络上查到的通过trigger.onchange()事件触发都不执行,没办法,只 ...

  2. DOM节点的使用(常用方法+代码)

    DOM节点的应用 学习总结 1. 什么是 DOM 2. HTMLDOM 3. 元素获取 元素获取方式 元素节点的属性操作 4. Node 对象的属性和方法 常用属性 常用方法 5. 事件处理 事件驱动 ...

  3. 深入理解DOM节点操作

    × 目录 [1]创建节点 [2]插入节点 [3]移除节点[4]替换节点[5]复制节点 前面的话 一般地,提起操作会想到“增删改查”这四个字,而DOM节点操作也类似地对应于此,接下来将详细介绍DOM的节 ...

  4. 深入理解DOM节点类型第六篇——特性节点Attribute

    × 目录 [1]特征 [2]属性 [3]方法 前面的话 元素的特性在DOM中以Attr类型表示,从技术角度讲,特性是存在于元素的attributes属性中的节点.尽管特性是节点,但却不是DOM节点树的 ...

  5. DOM 节点的克隆与删除

    无奈的开头 关于DOM节点操作,如果仅仅是根据标准API来操作,那是最简单不过的了.但是现实中却哪有这么容易的问题让我们解决,其实不仅仅是节点的克隆与删除,节点的添加也是如此,而且添加节点需要考虑的情 ...

  6. DOM节点属性

    节点属性 在文档对象模型 (DOM) 中,每个节点都是一个对象.DOM 节点有三个重要的属性 : 1. nodeName : 节点的名称 2. nodeValue :节点的值 3. nodeType ...

  7. 第6章 DOM节点操作

    一.创建节点 为了使页面更加智能化,有时我们想动态的在 html 结构页面添加一个元素标签,那么 在插入之前首先要做的动作就是:创建节点. varbox=$('<div id="box ...

  8. 通过DOM节点操作来获取表单信息

    这是之前突发奇想地用dom节点的关系来操作表单的故事.. 事情的经过是这样的,大概就是一个平台注册后有留言功能,管理员登录之后可以对这些留言进行回复.这个页面呢,就是通过foreach获取到数据库里的 ...

  9. 关于dom节点绑定滑动事件导致浏览器上下滑动失效解决方案--黄丕巧

    1.移动端开发往往需要添加一下自定义的左右滑动事件,但是添加了左右滑动事件之后就要阻止浏览器大默认事件,否则dom节点的滑动事件和浏览器本身的滑动会出现冲突,导致滑动的时候会出现消失瞬间再出现的效果 ...

随机推荐

  1. windy数(数位DP)

    windy数Crawling in process... Crawling failed Time Limit:1000MS     Memory Limit:165888KB     64bit I ...

  2. 第十一章 多GPU系统的CUDA C

    本章介绍了 显存和零拷贝内存的拷贝与计算对比 #include <stdio.h> #include "cuda_runtime.h" #include "d ...

  3. 【Aladdin Unity3D Shader编程】之三 光照模型(二)

    高光反射模型 Specular=直射光*pow(cosθ,高光的参数) θ:是反射光和视野方向的夹角 编写高光反射Shader Shader "AladdinShader/07 Specul ...

  4. vue初级学习--路由router的编写(resolve的使用)

    一.导语 最近在用vue仿写淘宝的商品详情页面以及加入购物车页面,若是成功了,分享给大家~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 二.正文 我先用控制台创建了vue项目demo(如 ...

  5. jQuery选择器(表单元素过滤选择器)第八节

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...

  6. 双11Java程序员书单推荐

    Java <Java核心技术卷I> <Java核心技术卷II> <Java编程思想> <Java并发编程实战> <Effective Java&g ...

  7. JS中的循环---最全的循环总结

    在讲循环的之前,先知道一下循环结构的执行步骤 1.声明循环变量: 2.判断循环条件; 3.执行循环体操作: 4.更新循环变量: 5.然后循环执行2-4,直到条件不成立,跳出循环. 1while循环 v ...

  8. 【Kafka源码】broker被选为controller之后的连锁反应

    [TOC] 今天我们主要分析下broker被选为controller之后,主要干了什么.门面代码先列出来: def onControllerFailover() { if (isRunning) { ...

  9. 如何部署Java_web项目到云服务器上

    步骤 1:购买 Linux 实例(略) 步骤2:安装JDK 本节介绍如何安装java jdk. 软件包中包含的软件及版本如下: Tomcat:1.8.0_121 说明:这是写文档时参考的软件版本.您下 ...

  10. mybatis取数据库为null的字段

    数据库中存在int型的字段,但是初始值为null,mybatis取值之后就会报错, org.apache.ibatis.binding.BindingException: Mapper method ...