js-DOM2,表单脚本
DOM2:
1、DOM2中:创建一个完整的HTML文档
document.implementation.createHTMLDocument("new Doc");
alert(htmldoc.title);------"New Doc"
alert(typeof htmldoc.body);-----"object"
2、 样式:
1) 在css属性是color,background-image ,在js中style.color,style.backgroundImage
float是js中的保留字,不能作为属性名,在样式对象是cssFloat,在IE中则是styleFloat
var a=document.getElementById("myDiv");
a.style.backgroundColor="red";
2) cssText:它能够访问style特性中的CSS代码
myDiv.style.cssText="width:25px;height:100px;background-color:green";
alert(myDiv.style.cssText);
3) getPropertyValue(propertyName):返回给定属性的字符串值
var prop,value,i,len;
for(i=0,len=myDiv.style.length;i<len;i++){
prop=myDiv.style[i] ; //或者myDiv.style.item(i);
value=myDiv.style.getPropertyValue(prop); ---字符串表示
alert(prop+":"+value);
}
4) 返回给定位置的css属性的名称
5) removeProperty(propertyName)
myDiv.style.removeProperty("border");
6) 包含重叠的样式并影响到当前元素:getComputedStyle()方法,接收两个参数,要取得计算样式的元素和一个伪元素字符串(eg::after),如果不需要伪元素,将第二个参数设为null,
<style type="text/css">
#myDiv{
background-color:blue;
width:100px;
height:200px;
}
</style>
<div id="myDiv" style="border:1px solid black"></div>
js:
var myDiv=document.getElementById("myDiv");
var computedStyle=document.defaultView.getComputedStyle(myDiv,null);
alert(computedStyle.backgroundColor); ----red
alert(computedStyle.width);
alert(computedStyle.border);-----有些浏览器返回1px solid black
3、操作样式表;
1)
var sheet=null;
for(var i=0,len=document.styleSheets.length;i<len;i++){
sheet=document.styleSheets[i];
alert(sheet.href);
}
2)
Css规则:
Var sheet=document.styleSheets[0]------第一个样式表
Var rules=sheet.cssRules || sheet.rules; ----取得规则表
Var rule=rules[0] --------------第一条规则
Alert(rule.selectorText); ---------------“div .box”
Alert(rule.style.cssText); -----------css代码
删除规则:
function deleteRule(sheet,index){
if(sheet.deleteRule){
sheet.deleteRule(index);
}else if(sheet.removeRule){
sheet.removeRule(index); ----IE
}
}
deleteRule(document.styleSheet[0],0);----调用函数
4、元素大小
1) 偏移量:
- offsetHight:元素在垂直方向上占用空间的大小,元素高度+水平滚动条高度+上边框高度+下边框高度
- offsetWidth:元素在水平方向上占用的空间大小,与offsetHight的计算方式类似
- offsetLeft:元素的左外边框至包含元素的左内边框之间的距离
- offsetTop:元素的上外边框至包含元素的上内边框之间的距离
function getElementLeft(element){
// offsetLeft以及offsetTop与包含元素有关,包含元素的引用在offsetParent中
var actualLeft=element.offsetLeft;
var current=element.offsetParent;
while(current !==null){
actualLeft+=current.offsetLeft;
current=current.offsetParent;
}
return actualLeft;
}
2) 客户区大小:clientWidth以及clientHeight(内容区+内边距高度)
function getViewport(){
if(document.compatMode=="BlackCompat"){
return{
width:document.body.clientWidth;
height:document.body.clientHeight;
};
}else{
return{
width:document.documentElement.clientWidth;
height:document.documentElement.clientHeight;
}
}
}
3) 滚动大小:
scollHeight:在没有滚动条的情况下,元素内容的总高度
scollWidth:在没有滚动条的情况下,元素内容的总宽度
scollLeft:被隐藏在内容区域左侧的像素数,通过设置这个属性可以改变元素的滚动位置
scollTop:被隐藏在内容区域上方的像素数,通过设置这个属性可以改变元素的滚动位置
var docHeight=Math.max(document.documentElement.scollHeight,
document.documentElement.clientHeight);
var docWidth=Math.max(document.documentElement.scollWidth,
document.documentElement.clientWidth);
function scollToTop(element){
if(element.scollTop!=0){
element.scollTop=0;
}}
5、遍历:
1) NodeInterator:4个参数,root,表示要访问哪些节点的数字代码,filter,false
当filter==null的时候,遍历所有
var div=document.getElementById("div1");
var filter=function(node){
return node.tagName.toLowerCase()=="li"?
NodeFilter.Filter_ACCEPT:
NodeFilter.Filter_SKIP;
}
var interator=document.createNodeInterator(div,NodeFilter.
SHOW_ELEMENT,filter,false);
var node=interator.nextNode(); //previousNode()
while(node!=null){
alert(node.tagName);
node=interator.nextNode();
}
2) TreeWalker
var walker=document.createTreeWalker(div,
NodeFilter.SHOW_ELEMENT,filter,false);
walker.firstChild();
walker.nextSibling();----下一个同辈元素
walker .currentNode----目前的起点
6、DOM中的范围:
1) createRange():
setStartBefore(refNode):
setStateAfter(refNode):
setEndBefore(refNode):
setEndAfter(refNode):
eg:
<p id="p1"><b>Hello</b> world</p>
var range1=document.createRange();
range2=document.createRange();
p1=document.getElementById("p1");
range1.selectNode(p1);
range2.selectNodeContents(p1);
range1---><p id="p1"><b>Hello</b> world</p>
range2---><b>Hello</b> world
2) var p1=document.getElementById("p1");
helloNode=p1.firstChild.firstChild; ----Hello
worldNode=p1.lastChild; ---- world
var range=document.createRange();
range.setStart(helloNode,2); ----llo
range.setEnd(worldNode,3); ---- wo
<p><b>He</b><b>llo</b> world</p>
“world”会划分为wo以及rld
3) range.deleteContents();
会输出<p><b>He</b> rld</p>
4) extractContents()会返回范围的文本片段
var fragment=range.extractContents();
p1.parentNode.appendChild(fragment);
<p><b>He</b> rld</p>
<b>llo</b> wo
5) cloneContents()保存的是范围节点中的副本,而不是实际节点
var fragment=range.cloneContents();
p1.parentNode.appendChild(fragment);
<p><b>Hello</b> world</p>
<b>llo</b> wo
6) insertNode()向范围选区的开始处插入一个节点
var span=document.createElement("span");
span.style.color="red";
span.appendChild(document.createTextNode("inserted text"));
range.insertNode(span);
输出:<p><b>He<span style="color:red">inserted text</span>llo</b> world</p>
7) 折叠到DOM范围:
range.collapse(true); //折叠到起点为true
8) 清理DOM范围
range.detach();//从文档中分离出来
range=null;
表单脚本:
1、documen.forms可以取得页面中所有的表单
var firstForm=document.forms[0];
var myForm=document.forms["foem2"];
2、提交表单:
1) <input type="submit" value="submit">
//自定义提交按钮
<button type="submit">submot</button>
//图片按钮
<input type="image" src="gg.gif">
2) 在js中以编程方式提交按钮 :
var form=document.getElementById("myForm");
form.submit();
但不会触发submit事件,所以在调用此方法之前需要先验证表单数据
表单重复提交:
方法1:
var checkSubmitFlg = false;
function checkSubmit() {
if (!checkSubmitFlg) {
// 第一次提交
checkSubmitFlg = true;
return true;
} else {
//重复提交
alert("Submit again!");
return false;
}
}
方法2:
EventUtil.addHandler(form,"submit",function(event){
event=EventUtil.getEvent(event);
var target=EventUtil.getTarget(event);
var btn=target.elements["submit-btn"];
btn.disable=true;
})
4、重置表单:
form.reset(); //会像单击重置按钮一样触发reset事件
5、表单字段:
var form=document.getElementById("form1");
//取得表单的第一个字段
var field1=form.elements[0];
//取得名为textbox1的字段
var field2=form.elements["textbox1"];
//取得表单中包含的字段的数量
var fieldCount=form.elements.length;
当多个表单控件同时使用一个name的时候,返回的是一个NodeList
6、共有的表单字段属性
form---指向当前字段所属表单的指针,只读
var form=document.getElementById("form1");
var field=form.elements[0];
alert(field.form===form) ----检查form属性的值
field.focus(); ---将焦点设置到当前字段
form.disable=true; ----禁用当前字段
7、共有的表单字段方法:focus()以及blur()
1) focus():将浏览器的焦点设置到表单字段,激活表单字段,使其可以响应键盘事件
eg:页面加载完毕,将焦点移动表单中的第一个字段
EventUtil.addHandler(window,"load",function(event){
document.forms[0].elements[0].focus();
});
Html5为表单元素添加一个autofocus属性,是个布尔值(在支持的浏览器中是true),在支持该属性的浏览器中,会自动将焦点移动到相应字段<input type="text" autofocus>;
2) blur()是将焦点从元素中移走
8、共有的表单字段事件:blur,focus,change(对于input以及textarea元素,失去焦点且value值改变的时候触发,对于select元素,在其选项改变的时候触发)
9、文本框脚本:
1) 输入不能超过50个字符,能够显示25个字符:
<input type="text" size="25" maxlength="50" value="aaaa">
2) 不能在textarea中指定最大的字符数
<textarea rows="25" cols="5">aaaa</textarea>
3) select()用于选择文本框中的所有文本,不接受参数,可以在任何时候被调用
var textbox=document.forms[0].elements["textbox1"];
textbox.select();
4) select事件:
selectionStart,selectionEnd:保存的是基于0的数值,表示文本的范围
function getSelectText(textbox){
return textbox.value.substring(textbox.selectionStart,textbox.selectionEnd)
}
5) 选择部分文本:setSelectionRange()方法
接收两个参数:第一字符的索引,最后一个字符的索引,在IE8以及之前的版本中,不支持这种方法
10、过滤输入:
1) 屏蔽字符
Eg:只允许用户输入数值:
EventUtil.addHandler(textbox,"keypress",function(event){
event=EventUtil.getEvent(event);
var target=EventUtil.getTarget(event);
var charCode=EventUtil.getCharCode(event);
//跨浏览器取得字符编码
if(!/\d/.test(String.fromCharCode(charCode)) && !event.ctrlKey){
// String.fromCharCode(charCode))将字符编码转化为字符串
EventUtil.preventDefault(event);
}
})
2) 操作剪贴板
beforecopy—发生在复制操作前触发;
copy
beforecut:
cut
beforepaste:
paste
clipboardData对象(访问剪贴板中的数据)的3个方法:getData(数据类型);setData(数据类型,要放至剪贴板的文本);clearData()
11、自动切换焦点:
<input type="text" name="tel1" id="textTel1" maxlength="3">
<input type="text" name="tel2" id="textTel2" maxlength="3">
<input type="text" name="tel3" id="textTel3" maxlength="4">
Js:
(function(){
function tabForward(event){
event=EventUtil.getEvent(event);
var target=EventUtil.getTarget(event);
if(target.value.length==target.maxlength){
var form=target.form;
for(var i=0,len=form.elements.length;i<len;i++){
if(form.elements[i]==target){
form.elements[i+1].focus()
}
return;
}
}
}
var textbox1=document.getElementById("textTel1");
var textbox2=document.getElementById("textTel2");
var textbox3=document.getElementById("textTel3");
EventUtil.addHandler(textbox1,"keyup",tabForward);
EventUtil.addHandler(textbox2,"keyup",tabForward);
EventUtil.addHandler(textbox3,"keyup",tabForward);
})()
12、HTML约束:
1) 必填字段:required
2) 数值范围:min,max,step(最大最小两个刻度之间的差值)
<input type="number" min="0" max="100" step="5" name="count">
//用户只能输入0-100之间的值,并且是5的倍数
stepUp(); //默认值是1,加1;
stepDown(); //默认值是1,减1;
stepDown(5); //减5
3) 输入模式:pattern---正则表达式
<input type="number" name="count" pattern=”\d+”>--输入数值
4) 检测有效性
- checkValidity()
if(document.forms[0].elements[0].checkValidity()){
//字段有效继续
}else{
//字段无效
}
- validity属性告诉你字段有效还是无效
if(input.validity && input.validity.valid){
if(input.validity.valueMissing){
alert("please add us")
}else if(input.validity.typeMismatch){
alert("sssss")
}
}
5) 禁用验证:novalidate
13、选择框脚本---select,option
add(new,rel);---添加option选项,位置在rel之前
multiple---布尔值
remove(index)
selectIndex:--基于0的选中项索引,如果没有选中项,则值为-1,对于多选控件,只保存第一项的索引
size---选择框中可见的行数
操作选项:
var selectbox=document.forms[0].elements["location"];
var text=selectbox.options[0].text;
var value=selectbox.options[0].value;
1) 选择选项:selectedIndex属性
单选:
var selectedOption=selectbox.options[selectbox.selectedIndex];
var selectedIndex=selectbox.selectedIndex;
var selectedOption=selectbox.options[selectedIndex];
alert("selected index:" + selectedIndex+ "\nSelected text:" + selectedOption.text+"\nSelected value:" +selectedOption.value);
多选:
function getSelectedOptions(selectbox){
var result=new Array();
var option=null;
for(var i=0,len=selectbox.options.length;i<len;i++){
option=selectbox.options[1];
if(option.selected){
result.push(option);
}
}
return result;
}
2) 添加选项:
第一种:
var newOption=new Option("option text","Option value");
selectbox.add(newOption,undefined);
第二种:
appendChild()
3) 移动:
var selectbox1=document.getElementById("selLocations1");
var selectbox2=document.getElementById("selLocations2");
selectbox2.appendChild(selectbox1.options[0]);
//appendChild()方法传入一个文档已有的元素,就会从父节点中移除它,再将它添加到指定位置
重排:
var optionToMove=selectbox.options[1];
selectbox.insertBefore(optionToMove,selectbox.options[optionToMove.index-1])
14、富文本编辑:
1) 使用contenteditable属性:true-打开;false-关闭;inherit—继承
<div class="editable" id="richedit" contenteditable></div>
var div=document.getElementById("richedit");
div.contentEditable="true";
js-DOM2,表单脚本的更多相关文章
- 表单脚本api_contenteditable
<html> <head></head> <body> <form> <div contenteditable>ssadas&l ...
- js验证表单大全
js验证表单大全 1. 长度限制 <script> function test() { if(document.a.b.value.length>50) { alert(" ...
- JavaScript高级程序设计第14章表单脚本 (学习笔记)
第十四章 表单脚本 1.阻止默认表单提交 1.提交表单数据 1.使用type=submit提交按钮 2.使用submit():方法 注意:当用户点击提交按钮时,会触发submit事件,从而在这里我们有 ...
- JS 更改表单的提交时间和Input file的样式
JS转换时间 function renderTime(data) { var da = eval('new ' + data.replace('/', '', 'g').replace('/', '' ...
- JavaScript基础笔记(十)表单脚本
表单脚本 一.表单基础知识 JavaScript中表单对应的是HTMLFormElement类型,该类型继承自HTMLElement类型. 通过document.forms可以获得所有表单元素,通过数 ...
- js动态控制表单表格
js动态控制表单表格,这里操作只讲,添加一行,删除一行,删除某一行某一列. 直接放代码: <!DOCTYPE html> <html> <head> <met ...
- jquery.form.js 让表单提交更优雅
jquery.form.js 让表单提交更优雅.可以页面不刷新提交表单,比jQuery的ajax提交要功能强大. 1.引入 <script src="/src/jquery-1.9.1 ...
- Vue.js:表单
ylbtech-Vue.js:表单 1.返回顶部 1. Vue.js 表单 这节我们为大家介绍 Vue.js 表单上的应用. 你可以用 v-model 指令在表单控件元素上创建双向数据绑定. v-mo ...
- 利用JS提交表单的几种方法和验证(必看篇)
第一种方式:表单提交,在form标签中增加onsubmit事件来判断表单提交是否成功 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 <scr ...
随机推荐
- 【XLL API 函数】xlGetName
以字符串格式返回 DLL 文件的长文件名. 原型 Excel12(xlGetName, LPXLOPER12 pxRes, 0); 参数 这个函数没有参数 属性值和返回值 返回文件名和路径 实例 \S ...
- osg四元数设置roll pitch heading角度
roll绕Y轴旋转 pitch绕X轴旋转 heading绕Z轴旋转 单位是弧度,可以使用osg::inDegrees(45)将45角度转换为弧度 定义一个四元数 osg::Quat q( roll,o ...
- [Android Pro] DES加密 version1
reference to : http://blog.csdn.net/wfung_kwok/article/details/7766029 加密和解密要用同一個key AES: import jav ...
- 使用vsphere client 克隆虚拟机
免费的VMWare ESXi5.0非常强大,于是在vSphere5.0平台中ESXi取代了ESX.,使用ESXi经常会遇到这样的问题,我需要建立多个虚拟机,都是windows2003操作系统,难道必须 ...
- Git 、 Cocoapods常用命令
Git常用命令 1.添加文件 git add xxx 2.提交更新到本地 git commit -m 'local-repo' 3.提交更新 git push master ...
- JS中级 - 01:DOM节点
1元素属性 1.1childNodes 返回元素的一个子节点的数组 (不推荐,建议用非标准children代替) 提醒:只包含一级子节点,不包含后辈孙级别以下节点. children:返回元素的一 ...
- devices-list
转自:https://www.kernel.org/pub/linux/docs/lanana/device-list/devices-2.6.txt LINUX ALLOCATED DEVICES ...
- java-解决业务操可能数据冲突问题
问题提出,由于业务会出现多人同时操作,或者业务人员反复的操作,因此在业务流程中,需要对业务操作数据进行保护,由于使用数据库锁可能会引起一些难以预料的问题,因此考虑使用内存锁,设计思想:在内存中使用一个 ...
- 如何减少JS的全局变量污染
A,唯一变量 B,闭包
- hdu 4031 2011成都赛区网络赛A题 线段树 ***
就是不知道时间该怎么处理,想了好久,看了别人的题解发现原来是暴力,暴力也很巧妙啊,想不出来的那种 -_-! #include<cstdio> #include<iostream&g ...