<!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. 介绍一款好用 mongodb 可视化工具

    最近想自己搭建一个个人博客,所以学了下mongodb,mongodb是用命令行输入的,有些人可能不太习惯,我自己找了下mongodb的一些可视化工具,一开始安装的是mongoVUE,mongoVUE页 ...

  2. Photoshop颜色出现比较大的偏差,偏色严重,显示器配置文件2351似乎有问题

    其实出现这个问题是因为 显示器的配置问题.并不是PS版本或者电脑系统问题. 一般在你首次启动PS的时候会出现提示:显示器配置文件2351似乎有问题. 如果你点击了继续运行那以后你使用PS打开任何文件都 ...

  3. SQL系统函数的使用(实验五)

    SQL系统函数的使用(试验5) 函数在查询语句中的使用 查询员工的姓名和日工资(保留1位小数): 查询并显示部门号为01和02的所有员工的姓名首字及岗位: 查询并显示所有员工的姓名及工龄: 查询199 ...

  4. js滚动加载小插件

    本文实例讲述了jquery滚动加载数据的方法.分享给大家供大家参考.具体分析如下: 少废话直接上代码!!!粗暴,直接,干脆 0//lk-2017-05-04 1(function($, win) { ...

  5. Jquery判断Checkbox是否选中三种方法

    方法一:if ($("#checkbox-id")get(0).checked) {    // do something} 方法二:if($('#checkbox-id').is ...

  6. C#移位运算(左移和右移)

    C#是用<<(左移) 和 >>(右移) 运算符是用来执行移位运算. 左移 (<<) 将第一个操作数向左移动第二个操作数指定的位数,空出的位置补0.  左移相当于乘. ...

  7. 《天书夜读:从汇编语言到windows内核编程》二 C语言的流程与处理

    1) Debug与Release的区别:前者称调试版,后者称发行版.调试版基本不优化,而发行版会经过编译器的极致优化,往往与优化前的高级语言执行流程会大相径庭,但是实现的功能是等价的. 2) 如下fo ...

  8. CloudStack架构分析

    Cloudstack功能 作为云计算解决方案,毫无疑问,以下几点是服务的核心关键(不限于以下几点),也作为后续开发和使用的出发点: 1. 支持多租户 2. 能够按需提供自服务 3. 宽带网络的接入 4 ...

  9. Python之matplotlib学习(一)

    小试牛刀 在上一节已经安装好matplotlib模块,下面使用几个例子熟悉一下. 对应的一些文档说明: http://matplotlib.org/1.3.1/api/pyplot_summary.h ...

  10. .NET Core工程编译事件$(TargetDir)变量为空引发的思考

    前言 最近客户反馈,为啥不用xcopy命令代替我自己写的命令来完成插件编译复制: 我的: <PostBuildEvent>call "$(SolutionDir)tools\to ...