常见DOM操作(JS)
来源:互联网 发布:电脑桌面文件整理软件 编辑:程序博客网 时间:2024/05/17 22:55
DOM
获取节点设置样式
// 获取<p id="p-id">...</p>var p = document.getElementById('p-id');// 设置CSS:p.style.color = '#ff0000';p.style.fontSize = '20px';p.style.paddingTop = '2em'
动态创建一个节点
var list = document.getElementById('list'), haskell = document.createElement('p');haskell.id = 'haskell';haskell.innerText = 'Haskell';list.appendChild(haskell);
这样我们就动态添加了一个新的节点:
<!-- HTML结构 --><div id="list"> <p id="java">Java</p> <p id="python">Python</p> <p id="scheme">Scheme</p> <p id="haskell">Haskell</p></div>
创建一个样式标签,将页面变为红色
var d = document.createElement('style');d.setAttribute('type', 'text/css');d.innerHTML = 'p { color: red }';document.getElementsByTagName('head')[0].appendChild(d);
将子节点插到指定节点之前
<!-- HTML结构 --><div id="list"> <p id="java">Java</p> <p id="python">Python</p> <p id="scheme">Scheme</p></div>
可以这么写:
var list = document.getElementById('list'), ref = document.getElementById('python'), haskell = document.createElement('p');haskell.id = 'haskell';haskell.innerText = 'Haskell';list.insertBefore(haskell, ref);
新的HTML结构如下:
<!-- HTML结构 --><div id="list"> <p id="java">Java</p> <p id="haskell">Haskell</p> <p id="python">Python</p> <p id="scheme">Scheme</p></div>
按字符串顺序重新排序DOM节点
<!-- HTML结构 --><ol id="test-list"> <li class="lang">Scheme</li> <li class="lang">JavaScript</li> <li class="lang">Python</li> <li class="lang">Ruby</li> <li class="lang">Haskell</li></ol>
// sort list:var testList=document.getElementById("test-list");var lis=document.getElementsByClassName('lang');for(let i=0;i<lis.length;i++){ for(let j=i+1;j<lis.length;j++){ if(lis[i].innerText >lis[j].innerText){ testList.insertBefore(lis[j],lis[i]) } }}
遍历ul中的节点
<!-- HTML结构 --><ul id="test-list"> <li>JavaScript</li> <li>Swift</li> <li>HTML</li> <li>ANSI C</li> <li>CSS</li> <li>DirectX</li></ul>
var list = document.getElementById("test-list");for(var i=0;i<list.children.length;i++){ var child=list.children[i].innerHTML; alert(child);}
删除ul中的特定节点
<!-- HTML结构 --><ul id="test-list"> <li>JavaScript</li> <li>Swift</li> <li>HTML</li> <li>ANSI C</li> <li>CSS</li> <li>DirectX</li></ul>
'use strict';// TODO//var p=docuemnt.getElementById('test-list');//var valid=new Set(['JavaScript','HTML','CSS']);var list = document.getElementById("test-list");var valid = new Set(['JavaScript', 'HTML', 'CSS']);for(var i=0;i<list.children.length;i++){ var child = list.children[i]; if(!valid.has(child.innerText)){ list.removeChild(child); i--;//子节点总数已变化 }}var list = document.getElementById("test-list");for(var i=0;i<list.children.length;i++){ var child=list.children[i].innerHTML; alert(child);}
表单
获取文本框中的值
// <input type="text" id="email">var input = document.getElementById('email');input.value; // '用户输入的值'
提交表单
方式一是通过元素的submit()方法提交一个表单,例如,响应一个<button>
的click事件,在JavaScript代码中提交表单:
<!-- HTML --><form id="test-form"><input type="text" name="test"><button type="button" onclick="doSubmitForm()">Submit</button></form><script>function doSubmitForm() {var form = document.getElementById('test-form');// 可以在此修改form的input...// 提交form:form.submit();}</script>
第二种方式是响应本身的onsubmit事件,在提交form时作修改:
<!-- HTML --><form id="test-form" onsubmit="return checkForm()"> <input type="text" name="test"> <button type="submit">Submit</button></form><script>function checkForm() { var form = document.getElementById('test-form'); // 可以在此修改form的input... // 继续下一步: return true;}</script>
注意要return true来告诉浏览器继续提交,如果return false,浏览器将不会继续提交form,这种情况通常对应用户输入有误,提示用户错误信息后终止提交form。
使用MD5来传输口令
<!-- HTML --><form id="login-form" method="post" onsubmit="return checkForm()"> <input type="text" id="username" name="username"> <input type="password" id="password" name="password"> <button type="submit">Submit</button></form><script>function checkForm() { var pwd = document.getElementById('password'); // 把用户输入的明文变为MD5: pwd.value = toMD5(pwd.value); // 继续下一步: return true;}</script>
这个做法看上去没啥问题,但用户输入了口令提交时,口令框的显示会突然从几个变成32个(因为MD5有32个字符)。
要想不改变用户的输入,可以利用<input type="hidden">
实现:
<!-- HTML --><form id="login-form" method="post" onsubmit="return checkForm()"> <input type="text" id="username" name="username"> <input type="password" id="input-password"> <input type="hidden" id="md5-password" name="password"> <button type="submit">Submit</button></form><script>function checkForm() { var input_pwd = document.getElementById('input-password'); var md5_pwd = document.getElementById('md5-password'); // 把用户输入的明文变为MD5: md5_pwd.value = toMD5(input_pwd.value); // 继续下一步: return true;}</script>
注意到id为md5-password的<input>
标记了name=”password”,而用户输入的id为input-password
的<input>
没有name属性。没有name属性的<input>
的数据不会被提交。
利用JavaScript检查用户注册信息是否正确,在以下情况不满足时报错并阻止提交表单:
- 用户名必须是3-10位英文字母或数字;
- 口令必须是6-20位;
- 两次输入口令必须一致。
<!-- HTML结构 --><form id="test-register" action="#" target="_blank" onsubmit="return checkRegisterForm()"> <p id="test-error" style="color:red"></p> <p> 用户名: <input type="text" id="username" name="username"> </p> <p> 口令: <input type="password" id="password" name="password"> </p> <p> 重复口令: <input type="password" id="password-2"> </p> <p> <button type="submit">提交</button> <button type="reset">重置</button> </p></form>
'use strict' var checkRegisterForm=function(){ // TODO:获取用户名、口令、重复口令标签中的值 var username=document.getElementById('username').value; var password=document.getElementById('password').value; var password2=document.getElementById('password-2').value; //判断用户名是否符合规则 var regUsername=/^[\w]{3,10}$/; var flag1=regUsername.test(username); //判断口令是否符合规则 var regPassword=/^.{6,20}$/; var flag2=regPassword.test(password); //判断两次口令输入是否相同 var flag3=password===password2?true:false; if(flag1&&flag2&&flag3){ return true; }else{ return false; }}
操作文件
在HTML表单中,可以上传文件的唯一控件就是<input type="file">。
注意:当一个表单包含<input type="file">
时,表单的enctype必须指定为multipart/form-data,method必须指定为post,浏览器才能正确编码并以multipart/form-data格式发送表单的数据。
var f = document.getElementById('test-file-upload');var filename = f.value; // 'C:\fakepath\test.png'if (!filename || !(filename.endsWith('.jpg') || filename.endsWith('.png') || filename.endsWith('.gif'))) { alert('Can only upload image file.'); return false;}
上传图片
<form method="post" action="http://localhost/test" enctype="multipart/form-data"> <p>图片预览:</p> <p></p><div id="test-image-preview" style="border: 1px solid #ccc; width: 100%; height: 200px; background-size: contain; background-repeat: no-repeat; background-position: center center;"></div> <p></p> <p> <input type="file" id="test-image-file" name="test"> </p> <p id="test-file-info"></p></form><script> var fileInput=document.getElementById('test-image-file'); info=document.getElementById('test-file-info'); preview=document.getElementById('test-image-preview'); //监听chang事件 fileInput.addEventListener('change',function(){ //清除背景图片 preview.style.backgroundImage=''; //检查文件是否选择 if(!fileInput.value){ info.innerHTML='没有选择文件'; return; } //获取file引用 var file=fileInput.files[0]; //获取File信息 info.innerHTML='文件'+file.name+'<br>'+ '大小'+file.size+'<br>'+ '修改'+file.lastModifiedDate+'<br>'; if(file.type!='image/jpeg'&&file.type!='image/png'&&file.type!='image/gif'){ alert('不是有效的图片文件'); return; } //读取文件 var reader=new FileReader(); reader.onload=function(e){ var data=e.target.result; preview.style.backgroundImage='url('+data+')'; } //以dataUrl的形式读取文件 reader.readAsDataURL(file); })</script>
- 常见DOM操作(JS)
- Ext Js中常见的操作DOM的方法
- JS中常见原生DOM操作API【总结整理)
- JS中常见原生DOM操作API【总结整理)
- jQuery DOM常见操作
- 常见dom树操作
- DOM常见操作
- js 中的dom操作
- js操作dom
- js 操作dom
- js 对 dom 操作
- Js操作DOM
- js操作dom节点
- js操作dom
- js 操作dom
- js dom操作API
- js操作xml dom
- js的DOM操作
- 记录:在使用 Adapter是对 item的点击设置,合并,不同布局实现
- nodejs debug 模块入门
- MMC/SD卡驱动的Config.in
- [Java]字节流与字符流的区别
- 【LeetCode41-50】找出丢失最小正整数,计算蓄水量,检测?*匹配(44),跳跳棋,全排列,矩阵逆转,颠倒字母重新排序(auto,set/multiset,vector初始化),n次方
- 常见DOM操作(JS)
- PHP session的使用简介
- swift3.0蓝牙开发(2)
- 1111111111
- 孤单之人的学习日记
- GOF设计模式-桥接模式
- 重玩python,安装pandas pandas pycharm pip一堆工具
- C/C++如何输入包含空格的字符串
- zlib 最新版本安装