技术标签: html5 前端网页设计 js html javascript
DOM是文档对象模型(Document Object Model)的简称,接住DOM模型、可以将结构化文档转换成DOM树,程序可以访问、修改书里的节点,也可以新增、删除树里的节点,陈哥需操作这颗DOM树时,结构化文档也会随之动态改变,所以,掌握了DOM编程模型后,就拥有了使用JavaScript脚本动态修改HTML的能力
DOM为常用的HTML元素提供了一套完整的继承体系,从页面的document对象到每个常用的HTML元素,DOM模型都提供了对应的类,每个类都提供了相应的方法来操作DOM元素本身、属性及其子元素
DOM为HTML元素提供了一种简单的继承关系,DOM模型里的HTML元素的继承关系如图
图中标粗的4个元素:Node,Document,Element,htmlElement都是普通HTML元素的超类,他们不直接对应于HTML页面控件,但是他们所包含的方法可以被其他页面元素调用,
HTML其他元素
有一些HTML元素至今可以互相嵌套,如< div />之间可以相互嵌套,但有一些HTML元素则不可互相嵌套,例如td元素只能作为tr元素的子元素,option元素只能作为select元素的子元素,下入描述了常用HTML的元素之间的包含关系
HTML对象作为整个HTML文档最大的对象,里面可以包含一个HTMLbodyElement对象,HTML文档还有两个对象体系:表单对象和表格对象。
使用DOM元素增加子元素时,必须注意元素之间的合理包含关系,例如,不要为td元素添加tr子元素,虽然语法上没有错误,但这种结构在HTML文档上无法显示;在定义< table />时,至少要为其怎加一个< tr />元素,否则该表格奖没有任何显示
为了动态的修改HTML元素,必须能访问HTML元素,DOM提供了两种方式来访问HTML元素
在设计网页时,建议为每一个标签设置一个id元素,这样就可以通过document.getElementById()方式在JavaScript中定位到具体的HTML元素,这样就可以很方便的修改它们了
对于制定了唯一id属性值的HTML元素,既可以使用getElementById()方法来获取,也可使用此处的querySelector()方法来获取,此处只要传入CSS的ID选择器(#ID)即可
下面一个例子是使用querySelectorAll()的例子
<head>
<script type = "text/javascript">
var change = function(){
var divList = document.querySelectorAll("div");
alert(divList);
for (var i in divList){
divList[i].innerHTML = "测试内容" + i;
divList[i].style.width = "300px";
divList[i].style.height = "50px";
divList[i].style.margin = "10px";
divList[i].style.backgroundColor = "#faa"
}
}
</script>
</head>
<body>
<div></div>
<div></div>
<div></div>
<input type = "button" οnclick="change();" value = "修改全部div元素"/>
</body>
上面页面代码中定义了3个< div />元素,粗体代码使用querySelectorAll(“div”)获取了页面所有的div,于是返回了所有div元素组成的NodeList,然后采用遍历循环,将NodeList中包含的所有HTML元素都设置了同样的Style样式
一旦获取了某个HTML元素,由于该元素实际上与DOM树的某个节点对应,因此可以利用节点之间的父子、兄弟关系来访问HTML元素
<body>
<ol id="books">
<li id="one">1</li>
<li id="two">2</li>
<li id="three" class= "selected">3</li>
<li id="fore">4</li>
<li id="five">5</li>
<li id="six">6</li>
</ol>
<input type = "button" value = "父节点" onclick = " change(curTarget.parentNode);"/>
<input type = "button" value = "第一个" onclick = " change(curTarget.parentNode.firstChild.nextSibling);"/>
<input type = "button" value = "上一个" onclick = " change(curTarget.previousSibling.previousSibling);"/>
<input type = "button" value = "下一个" onclick = " change(curTarget.nextSibling.nextSibling);"/>
<input type = "button" value = "最后一个" onclick = " change(curTarget.parentNode.lastChild.previousSibling);"/>
<script type = "text/javascript">
var curTarget = document.getElementById("three");
var change = function(target){
alert(target.innerHTML);
}
</script>
</body>
上面id为three的li标签被标记为了当前元素,于是5个按钮点击后便会分别反悔当前元素的“父元素”、“第一个”、“上一个”、“下一个”、“最后一个”等。
在我们平常编写程序时,习惯将同级元素并列显示,即
但在JavaScript中,父级元素ol和第一个li标签之间,会认为是还有一个节点,即他们之间的空格。
所以在程序中ol节点一共包含13个子节点,包含6个li节点,以及7个空白节点。访问上一个和下一个兄弟节点,调用了两次previousSibling、nextSibling,即上两个和下两个,这是正确的。
表单在DOM中由HTMLFormElement对象表示,该对象除了可调用前面介绍的基本属性
和方法之外,还拥有如下几个常用属性。
<body>
<form id="d" action="" method= "get ">
<input name="user" type="text" /><br />
<input name="pass" type= "text" /><br />
<select name="color">
<option value="red">红色</option>
<option value="blue"> 蓝色</option>
</select><br />
<input type= "button" value="第一个" οnclick=
"alert (document.getElementById('d') .elements[0].value);" />
<input type="button" value="第二个" οnclick=
"alert (document.getElementById('d') . elements['pass'].value) ;" />
<input type="button" value="第三个" οnclick=
"alert (document.getElementById('d') .color. value) ;" />
</form>
</body>
为三个按钮绑定了三个点击事件,事件为访问表单内的表单控件。
如第一个点击事件,先通过getElementById()访问到名为d的form表单,然后通过elements[]访问其内部的第一个表单控件,.value表示获取控件内的值。
实际上,HTMLFormElement 的elements 属性值并不是一个普通数组,而是一个HTMLCollection对象,该对象既可当成普通数组使用( 即通过数字索引访问元素),也可通过关联数组来访问(即通过字符串索引来访问元素)。因此上面页面的第一行代码可通过elements[pass],即表单里name或id属性值为pass的表单控件来访问一如果表单内有多个表单控件的name或id属性值为pass,则elements['pass ]将再次返回一个HTMLCOllection对象。不仅HTMLFormElement的elements属性值是HTMLCOllection对象。
实际上,HTML元素中许多可能返回对象数组的方法、属性值得到的都是-一个HTMLCollection对象,例如前面介绍的Node所提供的childNodes等。
根据_上面代码不难看出,HTMLFormElement 访问表单控件有如下3种语法。
HTMLSelectElement代表一个列表框或下拉菜单,HTMLSelectElement对象除了可使用普通HTML元素的各种属性和方法外,还支持如下额外属性
HTMLSelectElement的options 属性可直接访问列表框、下拉菜单的所有列表项,传入指
定索引即可访问指定列表项,语法格式如下。
<body>
<select id = "mySelect" name = "mySelect" size = "6">
<option value = "one">1</option>
<option value = "two">2</option>
<option value = "three">3</option>
<option value = "fore">4</option>
<option value = "five">5</option>
<option value = "six">6</option>
</select><br />
<input type ="button" value = "第一个" onclick = "change(curTarget.options[0]);" />
<input type ="button" value = "上一个" onclick = "change(curTarget.options[curTarget.selectedIndex - 1]);" />
<input type ="button" value = "下一个" onclick = "change(curTarget.options[curTarget.selectedIndex + 1]);" />
<input type ="button" value = 最后一个 onclick = "change(curTarget.options[curTarget.length - 1]);" />
<script tyle = "text/javascript">
var curTarget = document.getElementById("mySelect");
var change = function(target){
alert(target.text)
}
</script>
</body>
curTarget变量获取到了当前的select元素,通过调用change()函数,可以读取到具体options内的文本,如options[0]是获取第一个option元素,options[curTarget.selectedIndex+1]是获取当前选中选项的下一个,注意中括号内的curTarget. 不能省略,虽然括号外的options已经标明是curTarget的了,但是若内部调用属性时不标明curTarget,也会报错说找不到selectedIndex
HTMLTableElement代表表格,HTMLTableElement 对象除了可使用普通HTML元素的各
种属性和方法外,还支持如下额外的属性。
HTMLTableCellElement代表单元格,HTMLTableCellElement对象除了可使用普通HTML元素的各种属性和方法外,还支持如下额外索引值。只读属性。
访问到指定HTML元素之后,还可以对该元素进行修改,通过修改HTML元素就可以实现动态更新HTML页面的目的了。修改节点通常是修改节点的内容,修改节点的属性,或者修改节点的CSS样式。总结起来一句话:HTML元素的所有读写属性都可被修改!–旦HTML元素的属性值被修改,HTML页面上对应的内容也就随之改变。修改HTML元素通常通过修改如下几个常用属性来实现。
<body>
改变第<input id = "row" type = "text" size = "2" />行;
第<input id = "cel" type = "text" size = "2" />列的值为:
<input id = "celVal" type = "text" size = "16" /><br>
<input id = "chg" type = "button" value = "改变" onclick = "change();" />
<table id = "d" border = "1" style = "width:500px;border-collapse:collapse;">
<tr>
<td>11</td>
<td>12</td>
</tr>
<tr>
<td>21</td>
<td>22</td>
</tr>
<tr>
<td>31</td>
<td>32</td>
</tr>
</table>
<script type = "text/javascript">
var change = function(){
var tb = document.getElementById("d");
var row = document.getElementById("row").value;
row = parseInt(row); //将数值强转为整数,以防输入小数时无法修改
if(isNaN(row)){
//判断行数是否为整数
alert("您要修改的行必须是整数");
document.getElementById("row").value = "";
document.getElementById("cel").value = "";
return false;
}
var cel = document.getElementById("cel").value;
if(isNaN(cel)){
// 判断列数是否为整数
alert("您要修改的列必须是整数");
document.getElementById("row").value = "";
document.getElementById("cel").value = "";
return false;
}
if(row > tb.rows.length || cel >tb.rows.item(0).cells.length){
//判断修改的表格是否在表格内
alert("要修改的干预按个不在该表格内");
document.getElementById("row").value = "";
document.getElementById("cel").value = "";
return false;
}
//开始修改
tb.rows.item(row - 1).cells.item(cel - 1).innerHTML
= document.getElementById("celVal").value;
}
</script>
</body>
JavaScript可以为DOM动态增加节点,程序为DOM数增加节点时,页面会动态的增加HTML元素,当阿需要为页面增加HTML元素时,应按照如下两个而步骤操作
创建节点通常接住document对象的createElement方法实现,
当一个节点创建成功后,一定要将该节点添加到DOM树中才能显示出来。对于普通的节点,可采用Node对象的如下方法来添加节点。
为列表框、下拉菜单添加子节点,也就是为列表框、下拉菜单添加选项。添加选项有两种方法:
上面最后一种方法用于在最后添加选项时,将bofore指定为null,但这种方法在早期的浏览器如IE 8 及之前版本的浏览器会出错,因为它不允许add方法的最后一个参数为null,这就需要使用直接为指定选项赋值的方法来添加选项
new Option(text,value,defaultSelected,selected)
该构造器有4个参数
并不是每次构造该选项都需要指定4个参数,也可以只指定一个参数或者两个参数。如果构造Option对象时只指定了一个参数,则该参数是Option的text值;如果指定了两个参数,则第一个参数是text,第二个参数是value。
表格元素、表格行则另有添加子元素的方法。实际上,它们可以在添加子元素的同时创建这些子元素。也就是说,添加表格子元素时,往往无须使用document的createElement()方法来创建节点。
HTMLTableElement对象有如下方法。
<body>
添加<input id = "row" type = "text" size = "2" />行;
添加<input id = "cel" type = "text" size = "2" />列;
标题为<input id = "bt" type = "text" size = "2">
<input id = "chg" type = "button" value = "添加" onclick = "tj();" />
<div id="test"></div>
<script type = "text/javascript">
var tj = function(){
document.getElementById("test").innerHTML = ""; //在添加前清除之前的内容
var a = document.createElement("table");
var row = document.getElementById("row").value;
var cel = document.getElementById("cel").value;
a.style.width = "800px";
a.style.borderCollapse = "collapse";
a.border = 1;
var caption = a.createCaption();
caption.innerHTML = document.getElementById("bt").value;
row = parseInt(row);
cel = parseInt(cel);
if(isNaN(row)){
alert("您要修改的行必须是整数");
document.getElementById("row").value = "";
document.getElementById("cel").value = "";
return false;
}
if(isNaN(cel)){
alert("您要修改的列必须是整数");
document.getElementById("row").value = "";
document.getElementById("cel").value = "";
return false;
}
for(var i = 0;i < row;i++){
var tr = a.insertRow(i);
for(var j = 0;j <cel;j++){
var td = tr.insertCell(j);
td.style.padding = "5px";
td.innerHTML = "单元格内容" + i + j;
}
}
document.getElementById("test").appendChild(a);
}
</script>
</body>
删除HTML元素也是通过删除节点来完成,对于普通的HTML元素,可通过方法来删除节点,而列表框、下拉菜单、表格则由额外的方法来删除HTML元素。
删除节点通常借助其父节点,Node对象提供了如下方法来删除子节点
对于HTMLSelectElement对象而言,它提供了如下方法用于删除选项
<body>
<input type="button" id="delrow" value = "删除最后一行" onclick = "delrow();"><br>
<input type="button" id="delcell" value = "删除最后一行的最后一格" onclick = "delcell();"><br>
删除第<input id = "row" type = "text" size = "2" />行,
第<input id = "cel" type = "text" size = "2" />列的值;
<input id = "chg" type = "button" value = "删除" onclick = "ch();" />
<table id = "test" border = "1" style = "width:500px">
<tr>
<td>11</td>
<td>12</td>
</tr>
<tr>
<td>21</td>
<td>22</td>
</tr>
<tr>
<td>31</td>
<td>32</td>
</tr>
</table>
<script type = "text/javascript">
var row = document.getElementById("row");
var tab = document.getElementById("test");
var delrow = function(){
if(tab.rows.length>0){
//如果还有行
tab.deleteRow(tab.rows.length - 1);
}
if(tab.rows.length == 0){
//若已经没有行删除表格
document.body.removeChild(tab);
}
}
var delcell = function(){
var rowList = tab.rows;
var lastRow = rowList.item(rowList.length - 1);
if(lastRow&&lastRow.cells.length > 0){
//如果有最后一行
lastRow.deleteCell(lastRow.cells.length - 1)
}
if(lastRow&&lastRow.cells.length == 0){
//若最后一行已经Wie空,直接删除行
delrow();
}
}
</script>
</body>
错误信息Failed to execute goal on project XXXX: Could not resolve dependencies for project XXXX:war:1.0-SNAPSHOT: Could not find artifact *******:jar in sonatype-nexus-releases (http://oss.sonatype.org/c..._could not find artifact in nexus-releases
accwiz.exe > Accessibility Wizard for walking you through setting up yourmachine for your mobility needs. 辅助工具向导acsetups.exe > ACS setup DCOM server executableactmovie.exe > Direct Show setup tool 直接显_win2003资源监视器 命令行
awesome list收集各种awesome。awesome的源头在这里:awesome,后来发展了各种各样的avesome项目。不过资源都是英文的,不太方便国内同学查看,我这里整理了一些中文的avesome项目。参与贡献语言Java资源大全中文版Python 资源大全中文版PHP资源大全中文版PHP资源列表C++ 语言资源大全中文版C 语言资源大全中文版..._github 中文资源
最重要的是要注意参数的顺序一、简介: BeanUtils提供对Java反射和自省API的包装。其主要目的是利用反射机制对JavaBean的属性进行处理。我们知道,一个JavaBean通常包含了大量的属性,很多情况下,对JavaBean的处理导致大量get/set代码堆积,增加了代码长度和阅读代码的难度。二、用法: 如果你有两个具有很多相同属性的JavaBean,一个很常见的情..._beanutil.copy 和put
设置注释模板的入口: Window->Preference->Java->Code Style->Code Template 然后展开Comments节点就是所有需设置注释的元素啦。现就每一个元素逐一介绍:文件(Files)注释标签:/** * @Title: ${file_name} * @Package ${package_name} * @Description:...
SQL语句用于维护管理数据库,包括数据库查询、数据更新、访问控制、对象管理等功能SQL语句分类 DDL 数据定义语言,用于创建数据库对象,如库、表、索引等 DML 数据操作语言,用于对表中的数据进行管理 DQL 数据查询语言,用于从数据表中找到符合条件的数据记录 DCL 数据控制语言,用于设置或更改数据库用户或角色权限 进入数据库_linux写sql语句用写分号嘛
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47680811眼下。市面上有非常多管理手机流量的软件,能够让用户实时获取到自己手机中当前消耗了多少流量,手机中每一个应用程序消耗了多少手机流量,那么这些功能Android中是怎样实现的呢,这篇文章就是要向大家介绍一下,Android系统中流量管理的功能。那么。就让我们一...
文章目录一、Maven安装以及配置环境变量二、IDEA创建Maven项目三、配置Tomcat四、创建好Maven项目出现的问题第一次在IDEA使用Maven时花费了大量时间在搞各种配置和环境,特此记录!!完整的目录结构:一、Maven安装以及配置环境变量官方下载链接:https://archive.apache.org/dist/maven/maven-3/1、建议下载不要选最新的,我第一次使用的时候是Maven 3.6.3+IDEA 2020.3,结果死活用不了,一直卡在阿里云镜像那,后面选_阿里云镜像 404
运行demo.py之前,要运行train.py运行demo:问题:OSError: output\res101\voc_2007_trainval+voc_2012_trainval\default\res101_faster_rcnn_iter_110000.ckpt.meta not found.Did you download the proper networks from our..._faster rcnn github
方法一:不进行任何断链插入操作,找到目标节点之后,只是交换data值,这个思路很简单,与简单选择排序的思路一摸一样。编程注意事项:min不能标记最小值,应该要标记最小值对应的链表节点LinkList createLink(LinkList L) { cout << "尾插法创建单链表:"<<endl; int a; L = (LinkList)malloc(sizeof(LinkNode)); L->next = NULL; LinkNode *p=L,_简单选择排序链表实现
题目地址:http://pat.zju.edu.cn/contests/pat-a-practise/1072代码如下:
最近在编写项目的时候发现,将一个文件路径存储到DB中之后,再此运行的时候,沙盒的路径变了,百度之后发现:iOS8,Xcode6之后,由于安全问题,苹果将沙盒路径改成动态路径,每次运行之后,会将以前的沙盒下的东西COPY备份,然后删除以前的沙盒路径,再新建一个路径,将COPY下来的东西啊,放到新的路径下。这也就导致了我的项目存了路径,也找不到文件的问题。那针对以上问题,有以下解决方法:// ...