JS 操纵DOM问题,删除一个指定属性的元素

redcn2004 2008-12-03 03:47:50
有以下HTML代码:
  <div level="1"></div>
<div level="1"></div>
<div level="2"></div>
<div level="2"></div>
<div level="3"></div>
<div level="2"><a></a></div>
<div level="2"><a></a></div>
<div level="1"></div>


要求用JS删除所有level为2的div元素以及其中包含的元素,请问JS该怎么写?
...全文
1098 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
redcn2004 2008-12-03
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 chinmo 的回复:]
HTML code<div level="1">111</div>
<div level="1">2222</div>
<div level="2">33333</div>
<div level="2">44444444</div>
<div level="3">5555555555</div>
<div level="2"><a>66666666666</a></div>
<div level="2"><a>777777777</a></div>
<div level="1">9000</div>
<script>
function deldiv(){
var div =document.getElementsByTagName("div");
var j=0;
var arr=new Array(div.length)
f…
[/Quote]
为什么要采用数组暂存呢?
redcn2004 2008-12-03
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 chinmo 的回复:]
引用 12 楼 redcn2004 的回复:
引用 5 楼 lu_huanling 的回复:
1楼的有点错误
改正

HTML code
<div level="1">111 </div>
<div level="1">2222 </div>
<div level="2">33333 </div>
<div level="2">44444444 </div>
<div level="3">5555555555 </div>
<div level="2"> <a>66666666666 </a> </div>
<div level="2"> <a>777777777 </a> </div>
<div level="1">9000 </div>
<script>
var aa = docum…
[/Quote]
在看呢,我现在正在分析代码呢
  • 打赏
  • 举报
回复
还是准备倒分的?
要是倒分的事先声明一下,让我们闪!
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 redcn2004 的回复:]
引用 5 楼 lu_huanling 的回复:
1楼的有点错误
改正

HTML code
<div level="1">111 </div>
<div level="1">2222 </div>
<div level="2">33333 </div>
<div level="2">44444444 </div>
<div level="3">5555555555 </div>
<div level="2"> <a>66666666666 </a> </div>
<div level="2"> <a>777777777 </a> </div>
<div level="1">9000 </div>
<script>
var aa = document.getElementsByTagName("div")…
[/Quote]

你就没看到我发的?
只看他的?
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 lu_huanling 的回复:]
4 楼的也会有错的.还有漏掉的.
改成下面的就很完美了

HTML code
<div level="1">111</div>
<div level="1">2222</div>
<div level="2">33333</div>
<div level="2">44444444</div>
<div level="3">5555555555</div>
<div level="2"><a>66666666666</a></div>
<div level="2"><a>777777777</a></div>
<div level="1">9000</div>
<script>
function deldiv(){
var div = document.getElementsByTagName("di…
[/Quote]

不错,这样重定义
redcn2004 2008-12-03
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lu_huanling 的回复:]
1楼的有点错误
改正

HTML code
<div level="1">111</div>
<div level="1">2222</div>
<div level="2">33333</div>
<div level="2">44444444</div>
<div level="3">5555555555</div>
<div level="2"><a>66666666666</a></div>
<div level="2"><a>777777777</a></div>
<div level="1">9000</div>
<script>
var aa = document.getElementsByTagName("div");
var bb = new Array();
for(var i=0;i<aa.length;i+…
[/Quote]
这里的bb似乎是多余的
  • 打赏
  • 举报
回复
<div level="1">111</div>
<div level="1">2222</div>
<div level="2">33333</div>
<div level="2">44444444</div>
<div level="3">5555555555</div>
<div level="2"><a>66666666666</a></div>
<div level="2"><a>777777777</a></div>
<div level="1">9000</div>
<script>
function deldiv(){
var div =document.getElementsByTagName("div");
var j=0;
var arr=new Array(div.length)
for(var i=0;i<div.length;i++)
{
var level=div[i].getAttribute('level')
if(level=="2")
{
arr[j]=div[i];
j=j+1;
}
}
for(var k=0;k<=j;k++){
arr[k].parentNode.removeChild(arr[k]);
}
}
</script>

这样就可以一次删完
我再看看,为什么那样不能一次删完
lu_huanling 2008-12-03
  • 打赏
  • 举报
回复
4 楼的也会有错的.还有漏掉的.
改成下面的就很完美了

<div level="1">111</div>
<div level="1">2222</div>
<div level="2">33333</div>
<div level="2">44444444</div>
<div level="3">5555555555</div>
<div level="2"><a>66666666666</a></div>
<div level="2"><a>777777777</a></div>
<div level="1">9000</div>
<script>
function deldiv(){
var div = document.getElementsByTagName("div");
for(var i=0;i<div.length;i++)
{
var level = div[i].getAttribute('level');
if(level=="2")
{
div[i].parentNode.removeChild(div[i]);
div = document.getElementsByTagName("div");
i=i-1;
}
}
}
deldiv();
</script>
redcn2004 2008-12-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 bluefcxt 的回复:]
div没有level这个属性 能取出来么
[/Quote]
这是是自己添加的一个属性
阿云ivan 2008-12-03
  • 打赏
  • 举报
回复
那是跟索引的,所以每次只删两个,要用递归
阿云ivan 2008-12-03
  • 打赏
  • 举报
回复
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Untitled Page</title>
</head>
<body>
<div>
<div level="1">
a
</div>
<div level="1">
b
</div>
<div level="2">
c2
</div>
<div level="2">
d2
</div>
<div level="3">
e
</div>
<div level="2">
f2
</div>
<div level="2">
g2
</div>
<div level="1">
h
</div>
</div>
<input type="button" value="del Div Level=2" onclick="delLevelDiv('2')" />
</body>
</html>

<script type="text/javascript">
function delLevelDiv(level)
{
var divs=document.getElementsByTagName('div');
if(divs.length==0) return;
var j=0;
for(var i=0;i<divs.length;i++)
{
if(divs[i].getAttribute('level')==level) j++;
}
if(j==0) return;

for(var i=0;i<divs.length;i++)
{
var p=divs[i].parentNode;
if(divs[i].getAttribute('level')==level)
p.removeChild(divs[i]);
}
divs=document.getElementsByTagName('div');
if(divs.length>0) delLevelDiv(level);

}
</script>
  • 打赏
  • 举报
回复
汗!不知道怎么每次只删2个!倒!
我检查下,哪出了问题
lu_huanling 2008-12-03
  • 打赏
  • 举报
回复
1楼的有点错误
改正

<div level="1">111</div>
<div level="1">2222</div>
<div level="2">33333</div>
<div level="2">44444444</div>
<div level="3">5555555555</div>
<div level="2"><a>66666666666</a></div>
<div level="2"><a>777777777</a></div>
<div level="1">9000</div>
<script>
var aa = document.getElementsByTagName("div");
var bb = new Array();
for(var i=0;i<aa.length;i++)
{
var tt = aa[i].level;
if(tt=="2")
{
aa[i].outerHTML="";
aa = document.getElementsByTagName("div");
i=i-1;
}
}
</script>
  • 打赏
  • 举报
回复
兼容IE和FF的:

<div level="1">111</div>
<div level="1">2222</div>
<div level="2">33333</div>
<div level="2">44444444</div>
<div level="3">5555555555</div>
<div level="2"><a>66666666666</a></div>
<div level="2"><a>777777777</a></div>
<div level="1">9000</div>
<script>
function deldiv(){
var div = document.getElementsByTagName("div");
for(var i=0;i<div.length;i++)
{
var level = div[i].getAttribute('level');
if(level=="2")
{
div[i].parentNode.removeChild(div[i]);
}
}
}
</script>
<a href="javascript:" onclick="deldiv()">删除level为2的div元素以及其中包含的元素</a>
bluefcxt 2008-12-03
  • 打赏
  • 举报
回复
div没有level这个属性 能取出来么
  • 打赏
  • 举报
回复
<div level="1">111</div>
<div level="1">2222</div>
<div level="2">33333</div>
<div level="2">44444444</div>
<div level="3">5555555555</div>
<div level="2"><a>66666666666</a></div>
<div level="2"><a>777777777</a></div>
<div level="1">9000</div>
<script>
function deldiv(){
var div = document.getElementsByTagName("div");
for(var i=0;i<div.length;i++)
{
var level = div[i].level;
if(level=="2")
{
div[i].parentNode.removeChild(div[i]);
}
}
}
</script>
<a href="javascript:" onclick="deldiv()">删除level为2的div元素以及其中包含的元素</a>
lu_huanling 2008-12-03
  • 打赏
  • 举报
回复

<div level="1">111</div>
<div level="1">2222</div>
<div level="2">33333</div>
<div level="2">44444444</div>
<div level="3">5555555555</div>
<div level="2"><a>66666666666</a></div>
<div level="2"><a>777777777</a></div>
<div level="1">9000</div>
<script>
var aa = document.getElementsByTagName("div");
for(var i=0;i<aa.length;i++)
{
var level = aa[i].level;
if(level=="2")
{
aa[i].outerHTML="";
}
}
</script>
图书目录   第一部分 概论   第1章 从零开始   1.1 为什么选择JavaScript?    1.2 JavaScript的应用范围    1.3 JavaScript的版本    1.4 一些值得留意的特性 禁忌及如何突破这些禁忌    1.5 安全性和执行效率    1.6 一个例子--JavaScript编写的计算器    1.7 学习和使用JavaScript的几点建议    1.8 关于本书的其余部分    第2章 浏览器中的JavaScript   2.1 嵌入网页的可执行内容    2.2 赏心悦目的特效    2.3 使用JavaScript来与用户交互   2.4 绕开脚本陷阱 2.5 总结    第3章 开发环境和调试方法   3.1 我能用什么来编写脚本--适合编写JavaScript的文本编辑器    3.2 来自浏览器的支持    3.3 集成开发环境    3.4 调试工具--提升开发效率的利器    3.5 定位代码和调用堆栈    3.6 浏览器捕获异常    3.7 总结    第二部分 JavaScript核心   第4章 语言结构   4.1 JavaScript的基本文法    4.2 常量和变量    4.3 表达式和运算符符    4.4 控制语句 句    4.5 总结    第5章 数据类型   5.1 基本数据类型    5.2 数组和对象    5.2.1 数组    5.2.2 对象--一个构造函数的例子    5.3 函数类型--一个函数和闭包的例子    5.4 神奇的null和undefined    5.4.1 null    5.4.2 undefined--独一无二的类型    5.5 正则表达式    5.5.1 正则表达式常量    5.5.2 正则表达式对象    5.6 值类型和引用类型    5.6.1 什么是值和值的引用    5.6.2 使用值和使用引用    5.6.3 值与引用的相互转换:装箱和拆箱    5.7 类型识别与类型转换    5.7.1 运行时类型识别--两个运行的类型识别的例子    5.7.2 类型的自动转换及其例子    5.7.3 强制类型转换及其例子    5.7.4 高级用法--一个自定义类型转换的例子    5.8 警惕数值陷阱    5.8.1 困惑--浮点数的精度问题    5.8.2 误差的修正及其例子    5.9 总结    第6章 函数   6.1 函数定义和函数调用    6.1.1 函数的定义    6.1.1.1 声明式函数定义与函数表达式及其例子    6.1.1.2 JavaScript函数的奥妙——魔法代码    6.1.2 函数的调用    6.2 函数的参数    6.2.1 形参与实参    6.2.2 Arguments对象    6.2.2.1 一个使用Arguments对象检测形参的例子    6.2.2.2 一个使用Arguments对象接收任意个数参数的例子    6.2.2.3 一个使用Arguments对象模拟函数重载的例子    6.2.3 参数类型匹配--一个利用arguments实现函数重载机制的例子    6.3 函数的调用者和所有者    6.3.1 函数的调用者    6.3.2 函数的所有者--一个为函数指定所有者的例子    6.3.3 动态调用--外来的所有者    6.4 函数常量和闭包    6.4.1 匿名的函数    6.4.2 函数引用    6.4.3 函数参数和函数返回值及其例子    6.4.4 高级用法--闭包作为局部域与延迟求值    6.5 高级抽象--Function类型和函数模版    6.5.1 动态创建函数--一个利用Function实现Lambda算子的例子    6.5.2 模式--函数工厂及其实例    6.6 总结    第7章 对象   7.1 什么是对象    7.2 对象的属性和方法    7.2.1 对象的内置属性    7.2.2 为对象添加和删除属性    7.2.3 反射机制--枚举对象属性    7.3 对象的构造    7.3.1 构造函数--一个双精度浮点数封装类的例子    7.3.2 缺省构造和拷贝构造    7.3.3 对象常量    7.4 对象的销毁和存储单元的回收    7.5 JavaScript的内置对象    7.5.1 Math对象    7.5.2 Date对象--创建一个简单的日历    7.5.3 Error对象    7.5.4 其他内置对象    7.5.5 特殊的对象--全局对象与调用对象    7.6 总结    第8章 集合   8.1 数组和数组元素    8.1.1 数组的构造    8.1.2 数组常量    8.1.3 数组元素    8.2 数组对象和方法    8.2.1 查找元素    8.2.2 添加和删除元素    8.2.3 集合操作及其范例    8.2.3.1 join()方法    8.2.3.2 reverse()方法    8.2.3.3 sort()方法    8.2.3.4 concat()方法    8.2.3.5 slice()方法    8.2.3.6 splice()方法    8.2.3.7 toSgring()方法和toLocaleString()方法    8.3 哈希表    8.3.1 什么是哈希表    8.3.2 哈希表的构造    8.3.3 实现一个简单的HashTable类型    8.4 高级用法--集合操作和闭包    8.5 总结    第9章 字符串   9.1 字符串的构造    9.1.1 字符串常量    9.1.2 转义序列    9.1.3 字符串构造函数    9.2 字符串的使用    9.2.1 比较字符串    9.2.2 抽取和检索子串    9.2.3 连接拆分字符串    9.2.4 字符串的模式匹配--一个字符串格式校验的例子    9.2.5 其他方法    9.3 字符串与字符数组    9.4 字符串与文本处理--JavaScript棋谱阅读器(一)    9.4.1 需求分析--什么是棋谱和棋谱阅读器    9.4.2 系统设计--棋谱和棋盘数据的字符串描述    9.4.3 系统实现--解析和处理棋谱    9.4.4 完整的棋谱阅读器    9.5 总结    第10章 正则表达式   10.1 什么是正则表达式    10.1.1 正则表达式的概念    10.1.2 JavaScript中的正则表达式    10.2 正则表达式的规则    10.2.1 直接量字符    10.2.2 字符类和布尔操作    10.2.3 重复    10.2.4 选择、分组和引用    10.2.5 指定匹配的位置    10.2.6 标志——高级模式匹配的规则    10.3 模式匹配    10.3.1 用于模式匹配的String方法及其例子    10.3.2 用于模式匹配的RegExp方法    10.3.2.1 一个使用exec()方法从身份证号码获取生日的例子    10.3.2.2 一个使用test()方法遍历字符串的例子    10.4 关于正则表达式包装对象    10.4.1 RegExp对象——利用正则表达式实现全文检索    10.4.2 RegExp的实例属性    10.5 强大的正则表达式    10.5.1 分析正则表达式的局部    10.5.2 一个例子--强大的在线编辑器    10.5.3 构造新的文法--一个JSVM中实现JSVM2解析器的例子    10.6 高级用法    10.7 用正则表达式处理文本    10.7.1 创建一个计价公式编辑器    10.7.1.1 需求分析--什么是计价公式编辑器    10.7.1.2 系统实现--计价公式编辑器的实现    10.7.2 创建一个同步滚动歌词播放器    10.7.2.1 需求分析--什么是同步滚动歌词播放器    10.7.2.2 系统设计与实现--处理LRC歌词    10.8 总结    第三部分 浏览器与DOM   第11章 浏览器对象   11.1 Window对象--最基本的浏览器对象    11.1.1 Window对象概览    11.1.2 Window对象的生命周期    11.1.3 Window对象的属性和方法    11.1.4 一个多窗口应用的例子    11.2 Document对象--浏览器窗口文档内容的代表    11.2.1 Document对象概览    11.2.2 动态生成的文档    11.2.3 Document对象的基本信息    11.2.4 Document对象的外观属性    11.2.5 Document子对象接口    11.2.5.1 一个遍历Anchors对象的例子    11.2.5.2 一个颠倒图片的例子    11.3 对话框和状态栏    11.3.1 创建一个简单对话框    11.3.2 其他类型的对话框    11.3.2.1 模拟对话框--创建一个窗口对话框及一个对话框阻塞进行的例子    11.3.2.2 showModalDialog和showModelessDialog--非W3C或ECMAScrip标准    11.3.3 状态栏    11.4 框架--上层的Window对象    11.4.1 多框架应用    11.4.2 框架之间的关系    11.4.3 框架的命名    11.4.4 子框架中的JavaScript    11.4.5 框架的应用--多页签显示    11.4.5.1 什么是页签    11.4.5.2 页签的实现--创建一个包含页签的页面    11.5 表单和表单对象    11.5.1 Form对象及其范例    11.5.2 定义表单元素    11.5.3 客户端表单校验及其例子    11.5.4 创建一款通用的客户端表单校验组件    11.6 其他内置对象    11.6.1 Navigator对象--浏览器总体信息的代表    11.6.2 Screen对象--提供显示器分辨率和可用颜色数量信息    11.6.3 Location对象--当前窗口中显示文档的URL的代表    11.6.4 History对象--一个有趣的对象    11.7 总结    第12章 文档对象模型   12.1 什么是DOM    12.1.1 把文档表示为树    12.1.2 树的节点    12.1.3 DOM对象的通用属性和方法    12.1.4 HTML结构和DOM对象的关系--用JavaScript通过DOM来操作HTML文档    12.2 DOM与浏览器实现    12.2.1 关于DOM HTML API    12.2.2 DOM的级别和特性    12.2.3 DOM的一致性    12.2.4 差异性--浏览器的DOM方言    12.3 一组“盒子”--DOM元素    12.3.1 嵌套的“盒子”    12.3.2 “盒子”和“盒子”内容的分类    12.4 创建和删除节点    12.4.1 构造全新的节点    12.4.2 平面展开--通过文档元素直接创建    12.4.3 回收空间--删除不用的节点    12.5 访问和操纵DOM节点    12.5.1 打开每一个盒子--遍历节点    12.5.2 弄清层级关系--父子与兄弟    12.5.3 如何搜索特定节点    12.5.4 克隆节点--一个使用cloneNode()复制表格的例子    12.5.5 移动节点及其范例    12.5.6 关于添加新行和排序的小技巧    12.6 读写数据--添加、修改和删除属性    12.7 外观与行为    12.7.1 DOM样式属性    12.7.2 控制DOM元素的显示与隐藏    12.7.3 改变颜色和大小--一个简单有趣的例子    12.7.4 改变位置--创建一个绕圆圈旋转的文字    12.7.5 编辑控制及其范例    12.7.6 改变样式及其范例    12.7.7 改变行为    12.8 XML DOM    12.8.1 什么是XML DOM    12.8.2 如何使用XML DOM--一个利用XML实现多级关联下拉选择框的例子    12.9 总结    第13章 事件处理   13.1 什么是事件    13.1.1 消息与事件响应    13.1.2 浏览器的事件驱动机制    13.2 基本事件处理    13.2.1 事件和事件类型    13.2.2 事件的绑定    13.2.3 直接调用事件处理函数    13.2.4 事件处理函数的返回值    13.2.5 带参数的事件响应及其例子    13.2.6 “this”关键字    13.3 标准事件模型    13.3.1 起泡和捕捉--浏览器的事件传播    13.3.2 事件处理函数的注册    13.3.3 把对象注册为事件处理程序    13.3.4 事件模块和事件类型    13.3.5 关于Event接口    13.3.5.1 Event接口的属性和方法    13.3.5.2 UIEvent接口的属性    13.3.5.3 MouseEvent接口的属性    13.3.5.4 MutationEvent接口    13.3.6 混合事件模型    13.3.7 合成事件    13.4 浏览器的事件处理模型实现    13.4.1 Internet Explorer事件模型    13.4.1.1 关于IE事件注册    13.4.1.2 IE Event对象的属性    13.4.1.3 IE中的事件起泡    13.4.2 Netscape 4事件模型    13.4.2.1 Netscape 4中的事件捕捉及其范例    13.4.2.2 Netscape 4 Event对象的属性    13.5 回调与用户自定义事件    13.5.1 事件处理模式--一个实现简单事件处理模式的例子    13.5.2 用户事件接口的定义    13.5.3 事件代理和事件注册--一个实现标准事件接口的例子    13.5.4 标准模式--事件分派和接收    13.6 一个例子--增强数据表格    13.6.1 什么是增强数据表格    13.6.2 一个采用两重table嵌套方式固定表头的例子    13.6.3 可变列宽的实现    13.6.4 标记行--呈现有别于其他行的背景色    13.6.5 小技巧--将代码添加到样式表    13.7 总结    第14章 级联样式表   14.1 什么是级联样式表    14.1.1 CSS样式和样式表    14.1.2 CSS的标准化    14.1.3 浏览器支持的CSS    14.2 JavaScript与CSS    14.2.1 CSS和DOM的关系    14.2.2 CSS和IE的关系    14.2.3 浏览器的CSS兼容性    14.3 控制CSS改变页面风格    14.3.1 实现结构与表现的分离及其范例    14.3.2 使用JwaScript和CSS实现页面多种风格的实时替换    14.4 总结    第15章 数据存储的脚本化   15.1 什么是cookie    15.1.1 浏览器和客户端cookie    15.1.2 cookie的属性    15.2 cookie的客户端存取    15.2.1 cookie的存储    15.2.2 cookie的读取    15.3 cookie的限制    15.4 cookie示例--让问候更加温暖    15.5 cookie对象的封装    15.6 什么是userData    15.6.1 浏览器和客户端userData    15.6.2 userData的声明    15.6.3 userData的属性和方法    15.7 userData的客户端存取    15.7.1 userData的存储和读取    15.7.2 userData的安全性    15.8 userData的限制    15.9 userData与cookie的对比    15.10 userData示例--一个利用userData实现客户端保存表单数据的例子    15.11 总结    第四部分 数据交互   第16章 同步和异步   16.1 什么是同步和异步    16.2 超时设定和时间间隔    16.3 定时器使用--侦听与拦截    16.3.1 标准模式--监视器及其范例    16.3.2 使用定时器时应当注意的问题    16.4 一个例子--漂亮的Web时钟    16.4.1 什么是Web时钟?    16.4.2 最简单的Web时钟    16.4.3 Web时钟的设计    16.4.4 完整的Web时钟源代码    16.5 总结    第17章 XML DOM和XML HTTP   17.1 什么是XML DOM对象    17.1.1 XML DOM简介    17.1.2 浏览器支持的XML DOM接口    17.1.2.1 XML DOM标准接口    17.1.2.2 IE的XML DOM组件    17.1.2.3 操作XML文档--一个使用MSXML操作XML文档的例子    17.2 XML DOM的版本兼容性--XML DOM的跨浏览器应用    17.3 XML DOM的错误处理    17.3.1 处理错误信息的ParseError对象    17.3.2 包含错误信息的文档    17.4 XML DOM操作XML文档    17.4.1 访问节点    17.4.2 创建新节点    17.4.3 移动和修改节点及其范例    17.4.4 读写节点属性和读写数据    17.4.5 保存文档    17.5 一个例子--JavaScript棋谱阅读器(二)    17.5.1 用XML描述棋谱    17.5.2 将XML棋谱转换为SGF棋谱    17.6 什么是XML HTTP对象    17.6.1 XML HTTP对象简介    17.6.2 浏览器支持的XML HTTP对象    17.7 通过XML HTTP发送请求    17.7.1 建立连接    17.7.2 发送请求    17.8 读取和设定HTTP头    17.8.1 什么是HTTP头    17.8.2 读取和设定HTTP头    17.9 服务器应答    17.9.1 同步和异步应答及其例子    17.9.2 包含应答文本内容的ResponseText 和ResponseXML    17.10 总结    第18章 Ajax简介    第19章 标准和兼容性    第20章 信息安全   第五部分 超越JavaScript   第21章 面向对象   第22章 闭包与函数式编程   第23章 模块级管理   第24章 动态构建    第25章 执行效率   25.1 为什么要讨论执行效率    25.2 封闭的代价    25.3 盒子里的流火    25.4 动态--魔鬼与天使    25.5 让代码轻舞飞扬    25.6 总结    第26章 应用框架   26.1 应用框架概览   26.2 为什么要设计应用框架    26.3 如何设计应用框架    26.4 框架的实际应用--在Silverna 2.0框架上开发的Widgets    26.5 已存在的应用框架    26.6 总结 编辑本段 图书章节
JavaScript:定义行为和动作 (基于对象和事件驱动的客户端脚本语言;也是一种广泛应用于客户端Web开发的脚本语言) 基于对象:网页中的一切元素都是假象!不需要new,即可直接使用 事件驱动:JavaScript的执行都是由事件引发 解释执行:先读到的先执行,后读到的会替代先读的 可以使用任何文本编辑工具编写 JavaScript 代码,然后由浏览器解释执行。 JavaScript常用于实现如下功能: |--控制文档的外观和内容; |--对浏览器的控制; |--与 HTML 表单的交互; |--与用户的交互; |--执行计算等。 1.单击事件:定义在按钮的开始标签中 语法:onclick="js语句" 弹出警告:alert(‘字符串’) 强调:1.js区分大小写 2.字符串单双引号不区分 [removed]标签:页面中专门集中编写JavaScript的区域 js的方法定义:function方法名([参数列表]){ 方法体 [return 返回值] } 注意:js中的方法可以直接写在代码中,不需要“类”包裹 使用方法:方法名()-->方法调用-->立即执行 2.js文件:网页外专门保存js脚本的文件--推荐 强调:HTML、CSS、JS都要使用UTF-8编码保存(window系统) 使用js文件引入网页:[removed][removed] 强调:一旦定义src属性则其中的代码失效 解释执行:语句也可以直接写在js文件中,边解释边执行 3.***调试*** |--①.只有在执行时,才会报错 |--②.错误信息,浏览器页面看不到--没效果 | 解决:控制台--(工具-->JavaScript控制台或F12) | 包含错误信息;指向错误位置的超链接 |--③.打桩:在指定变量位置输出变量或对象的内容 console.log(内容);-->出现在控制台-->日志 4.变量:js中的变量不需要提前指定类型,由赋值时动态决定 所有的变量都用var声明 5.数据类型: |--String(字符串类型) |--Number(数字类型) |--Boolean(布尔类型)0、-0、null、""、false/undefined或NaN,则该对象设置为false。其余都可以当true 6.数据类型的隐式转换: |--数字 + 字符串:数字转换为字符串 |--数字 + 布尔值:true转换为1,false转换为0 |--字符串 + 布尔值:布尔值转换为字符串true或false |--布尔值 + 布尔值:布尔值转换为数值1或0 7.数据类型转换函数 :(方法前不需要对象调用的:全局函数) |--toString():转换成字符串。所有数据类型均可转换为 string 类型; |--parseInt():强制转换成整数。如果不能转换,则返回 NaN(not a number); |--parseFloat():强制转换成浮点数。如果不能转换,则返回 NaN(Not a Number) |--typeof():查询数值当前类型。 |--isNaN():判断是否为数字。返回 true:不是数字/false:是数字 | |--isNan(""):对空字符串不验证,直接返回false | |--如果输入的是字符串类型的数字,返回false--不能判断数据类型,只判断内容 | |--如果输入的是boolean,返回false。因为boolean可以和number类型直接做计算 | |--和任何数字计算都得NaN;和任何数字作比较都得false |--注:[removed]();节点输出,即在当前位置输出括号里的内容 *凡是从页面上进入js的都是字符串类型 8.查找元素:抓住根节点,就等于抓住整棵树 网页的根节点:document对象 要找元素,必须利用document对象(当前网页文件) 精确查找某个ID的元素:document.getElementById(id名); 9.null和undefined: |--null:一个特殊的值,表示“无值”--空对象。数据类型为Object |--undefined:表示声明了变量但从未赋值或者对象属性不存在 10.双等号(==)和全等号(===): |--“==”为确定两个运算数是否相等,“==”运算符会进行类型转换。转换后运算数相等就返回true,否则返回false |--“===”不执行类型转换,即,只有在无需类型转换运算数就相等的情况下,才返回true,否则返回false |--附:if(null)、if(defined)、if(NaN)都相当于if(false) -----猜数字游戏----- 失去焦点时,判断猜对猜错 获得焦点:onfocus 失去焦点:onblur 当事件就发生在获得内容的当前元素上: this直接获得当前内容对象。可以代替当前对象完成一切操作,拥有当前对象的所有属性 前端优化:js中最好用三目运算代替if else 11.String: |--查找:x.indexOf(‘关键字’[,开始位置下标]) | 每次只查找第一次出现的位置 |--替换:x.replace(‘关键字’[,‘替换内容’])--不会修改原x字符串 | 每次只替换第一次找到的 |--查找和替换所有:while循环 | |--String 对象的常用方法有: |--x.toLowerCase()、x.toUpperCase():大小写转换方法; |--x.charAt(index):返回指定位置的字符; |--x.charCodeAt(index):返回指定位置字符的Unicode编码; |--x.indexOf(findstr,index)、x.lastIndexOf(findstr,index): 获取指定字符; |--x.substring(start, end): 获取子字符串; |--x.replace(findstr,tostr):替换子字符串; |--x.split(bystr): 拆分子字符串。 |--String与正则表达式 |--str.match(regExp);--查找str中匹配正则表达式的关键字 | 返回:如果没找到,返回null。若找到,返回1个数组,数组的每个元素是每个找到的匹配关键 | |--str.replace(regExp,"替换值")--替换str中所有匹配的关键字 | 强调:replace方法不改变元字符串,只能返回新字符串。必须用变量接收新字符串 | |--js中正则表达式语法:/正则表达式/[属性后缀]--其中属性后缀,g:全局匹配 i:忽略大小写(仅英文有效) 如果不适用模式匹配方式,将执行原文匹配 结果:如果正则表达式写错,也将执行原文匹配 12.Array笔试题:js中数组声明方式: A new Array(7) B new Array(7,‘a’,true) C [7,'a',true]--js中所有[]都表示数组 D []--实例化一个空数组对象 实例化空数组:var arr=[]; 特点:元素个数不限定,元素类型不限制 13.Array 对象的常用方法: |--1.join()方法--用于把数组中的所有元素放入一个字符串   | eparato表示要使用的分隔符。如果省略该参数,则使用逗号作为分隔符 |--2.toString()方法--可把数组转换为字符串,并返回结果 |--3.concat()方法--用于连接两个或多个数组,该方法不会改变现有的数组 |--4.slice()方法--截取元素。根据给定的范围可从已有的数组中返回选定的元素 14.Function:js中一切都是对象,连方法都是1个对象!! 笔试题:js中方法定义集中方式: A:function compare(a,b){return a-b;}---*可以任意地方声明方法* B:var compare=function(a,b){return a-b;} ---| --其实方法名也是方法对象的变量名;等号右边其实就是1个匿名方法对象 |--*必须在传递之前声明方法对象* C:var compare=new Function('a','b','return a-b') ---| --其实js底层就是new Function;构造函数中的参数都是字符串 结论:所有的方法都是function类型的。 15.JavaScript中的所有事物都是对象,分为三类: |--简单对象:String、Number、Boolean |--组合对象:Array、Math、Date |--复杂对象:Function、Regex、Object等 16.Array排序: |--升序:function compare(a,b){return a-b;} |--降序:function compare(a,b){return b-a;} 比较器用法:arr.sort(比较器方法名); 遍历:for(var i=0;i元素的顺序 17.Array元素操作: |--arr.push(x);向数组增加1个新元素x(位于数组最后位置) |--arr.splice(开始位置,删除几个[,x1,x2,x3...]) |--arr.indexOf(x) 返回x在数组中的下标---经常用于判断元素是否存在。如返回-1,x则不在数组中 18.Number对象: |--x.toFixed(num):可把Number四舍五入为指定小数位数(num:0-20)的数字 |--x.toString():用于把一个 Number 对象转换为一个字符串,并返回结果 19.正则表达式对象:(专门用于查找和验证) reg.test(‘要验证的完整字符串’)匹配返回true,否则返回false 强调:如果正则表达式使用了^和$,必须完整匹配才行。反之则部分匹配 20.Date对象:(计算方法:先get,再计算,最后set回去) |--1.每个分量上都有一对get/set方法 |--2.命名:get|set年月日,单数;get|set时分秒,复数(s) |--3.除了日期从1开始到31结束外,其余都从0开始到-1结束 |--Date对象的常用方法 |--1.获取日期数据 getDate()、getDay()、getFullYear()等 |--2.修改日期数据 setDate()、setDay()、setFullYear()等 |--3.获取日期格式的字符串 toString()、toLocaleTimeString()、toLocaleDateString()等 21.argument参数:所有方法都隐藏的一个数组对象 作用:不设置任何的形参的情况下,自动接收所有传入参数 arguments.length:获得参数个数 arguments[i]:获得每个参数--都要判断和类型转换 22.全局函数:不用任何对象点(.)就可以调用--可用于所有的 JavaScript 对象 常用的全局函数有:parseInt/parseFloat、isNaN、eval、decodeURI/encodeURI等。 encodeURI和decodeURI: |--encodeURI:可把字符串作为 URI 进行编码 |--decodeURI:decodeURI()函数可对encodeURI()函数编码过的 URI 进行解码 eval() 函数可计算某个字符串,并执行其中的的JavaScript代码 23.BOM:操作浏览器窗口的对象模型。 --即浏览器对象模型 ,用来访问和操纵浏览器窗口,使 JavaScript 有能力与浏览器“对话” DOM:操作网页中元素对象的对象模型--即文档对象模型,用来操作文档 window对象的常用属性: |--document:窗口中显示的 HTML 文档对象 |--history:本次浏览过窗口的历史记录 | --前进:history.go(1);后退:history.go(-1);刷新:history.go(0); |--location:窗口文件地址对象(地址栏) |--event:事件对象 |--screen:屏幕对象 |--name:窗口名称 |--opener:打开当前窗口的 window 对象 |--navigator:有关浏览器的信息 |--cookieEnable:判断当前浏览器是否启用cookie |--userAgent:获得浏览器的名称和版本号 window 对象的常用方法有: |--alert();--警告框--只能点确认 |--confirm();确认框--可以选择确认或取消 |--prompt();对话框--用于显示可提示用户进行输入 |--window.open('url'[,'name']):打开1个选项卡 |--window.close():关闭当前选项卡 24.定时器:凡是网页中自动动态的效果都是用计时器实现的 |--周期性定时器:每隔一个时间段自动执行一次,循环执行 | |--setInterval() 启动-->用于启动一个周期性定时器 | 语法:timer=setInterval(方法名,间隔毫秒数) |--clearInterval() 停止-->用于停止一个周期性定时器 语法:timer=clearInterval(timer) |--1次性定时器:先等待一段时间,再自动执行一次,自动结束 |--setTimeout() 启动-->用于启动一个一次性定时器 |--clearTimeout() 停止-->用于停止一个一次性定时器 附: |--表单控件,读写内容:.value |--普通html元素,要想读写开始标签和结束标签之间的内容:[removed] 计时器:1.做什么事:方法; 2.一个变量:存计时器的线程号 3.何时启动计时器:事件 25.document:1.代表当前网页文档; 2.所有网页元素的根元素; 3.查找和操作元素,都要依靠document; 节点:nodeName--标签名或属性DOM操作样式:对象.className属性 等效于<标签class=""> DOM树:当前节点向上:txtObj[removed]() 向下:txtObj.getElementByTagName() 26.表单中查找控件对象:document.getElementsByName('name属性') DOM增加新节点:两种方法 创建新节点:document.creatElement('标签名') --此时新元素对象仅在内存中游离,页面看不见! 添加新节点:找到父元素! |--appendChild() 方法只能将新节点作为某节点的最后一个子节点 | --此时新元素追加到了父元素的末尾 |--parentNode.insertBefore()(新元素对象,A)--其中A为新元素要插入位置的后一位元素 DOM删除元素:node.removeChild(childNode)--node为父节点,childNode为要删除的节点 27.HTML DOM Select和Option对象: select对象:代表HTML表单中的一个下拉列表,每个元素中所有