1.getElementsByClassName()

  1. function getElementsByClassName(node,classname){
  2. if(node.getElementsByClassName){
  3. //使用现有方法
  4. return node.getElementsByClassName(classname);
  5. }else{
  6. var results=new Array();
  7. var elems=node.getElementsByTagName("*");
  8. for(var i=0;i<elems.length;i++){
  9. if(elems[i].className.indexOf(classname)!=-1){
  10. results[results.length]=elems[i];
  11. }
  12. }
  13. return results;
  14. }
  15. }
  16. var list1=document.getElementById("linklist");
  17. var test=getElementsByClassName(list1,"test");
  18. console.log(test);

2.共享onload事件

假设我有两个函数,firatFunction,secondFunction,如果想让他们在加载时得到执行,如果把他们注意绑定到onload事件上,他们当中将只有最后那个才会被实际执行:

  1. window.onload=firstFunction;
  2. window.onload=secondFunction;

secondFunction将取代firstFunction,你可能会想,每个事件处理函数只能绑定一条指令。有一种方法可以让我避过这个难题:可以先创建一个匿名函数来容纳这两个函数,然后把那个匿名函数绑定到onload事件上,如下所示:

  1. window.onload=function(){
  2. firstFunction();
  3. secondFunction();
  4. }

它确实能很好的工作--在需要绑定的函数不是很多的场合,这应该是最简单的解决方法,

这里还有一个最佳的解决方法--不管你打算在页面加载完毕时执行多少个函数,它都可以应付自如。

  1. function addLoadEvent(func){
  2. var oldonload=window.onload;
  3. if(typeof window.onload!='function'){
  4. window.onload=func;
  5. }else{
  6. window.onload=function(){
  7. oldonload();
  8. func();
  9. }
  10. }
  11. }
  12. addLoadEvent(firstFunction);
  1. addLoadEvent(secondFunction);
  1.  

3.在现有元素后插入一个新元素

  1. function insertAfter(newElement,targetElement){
  2. var parent=targetElement.parentNode;
  3. if(parent.lastChild==targetElement){
  4. parent.appendChild(newElement);
  5. }else{
  6. parent.insertBefore(newElement,targetElement.nextSibling);
  7. }
  8. }

这里注意insertBefore的使用,在目标元素前面插入新元素

  1. parentElement.insertBrfore(newElement,targetElement);

4.寻找下一个元素节点

  1. function getNextElement(node){
  2. if(node.nodeType==1){ //1代表元素节点
  3. return node;
  4. }
  5. if(node.nextSibling){
  6. return getNextElement(node.nextSibling);
  7. }
  8. return null;
  9. }
  10. var header=document.getElementById("header");
  11. var elem=getNextElement(header.nextSibling);

5.追加类名

  1. function addClass(element,value){
  2. if(!element.className){
  3. element.classNmae=value;
  4. }else{
  5. newClassName=element.className;
  6. newClassName+=" ";
  7. newClassName+=value;
  8. element.className=newClassName;
  9. }
  10. }

6.当前页面导航突出显示,并给body添加不同的id

  1. function highlightPage(){
  2. var headers=document.getElementsByTagName("header");
  3. if(headers.length==0) return false;
  4. var navs=headers[0].getElementsByTagName("nav");
  5. if(navs.length==0) return false;
  6. var links=navs[0].getElementsByTagName("a");
  7. var linkUrl;
  8. for(var i=0;i<links.length;i++){
  9. linkUrl=links[i].getAttribute("href");
  10. if(window.location.href.indexOf(linkUrl)!=-1){ //获取当前页面链接
  11. links[i].className="here";
           var linkText=links[i].lastChild.nodeValue.toLowerCase();
           document.body.setAttribute("id",linkText);
  12. }
  13. }
  14. }

7.点击label,表单字段获得焦点

作为增进可访问性的元素,label非常有用,它通过for属性把一小段文本关联到表单的一个字段,对于屏幕阅读器来说,标签中的这一小段文本几乎是不可或缺的。很多浏览器都会为label添加默认行为:如果label中的文本被单击,关联的表单字段就会获得焦点。这对于增进表单的可用性是很有帮助的,然而并不是所有浏览器都实现了该行为。

  1. function focusLabels(){
  2. var labels=document.getElementsByTagName("label");
  3. for(var i=0;i<labels.length;i++){
  4. labels[i].onclick=function(){
  5. var id=this.getAttribute("for");
  6. var element=document.getElementById(id);
  7. element.focus();
  8. }
  9. }
  10. }

8.占位符值

  1. function resetFields(whichform){
  2. //form.elements.length 返回表单包含的表单元素个数
  3. for(var i=0;i<whichform.elements.length;i++){
  4. var element=whichform.elements[i];
  5. if(element.type=="submit") continue;
  6. var check=element.placeholder || element.getAttribute("placeholder");
  7. if(!check) continue;
  8. element.onfocus=function(){
  9. var txt=this.placeholder || this.getAttribute("placeholder");
  10. if(this.value==txt){
  11. this.className="";
  12. this.value="";
  13. }
  14. }
  15. element.onblur=function(){
  16. if(this.value==""){
  17. this.className="placeholder";
  18. this.value=this.placeholder || this.getAttribute("placeholder");
  19. }
  20. }
  21. element.onblur();
  22. }
  23. }
  24.  
  25. addLoadEvent(prepareForms)
  26. function prepareForms(){
  27. for(var i=0;i<document.forms.length;i++){
  28. var thisform=document.forms[i];
  29. resetFields(thisform);
  30. }
  31. }

JavaScript部分兼容性函数的更多相关文章

  1. 深入理解javascript:揭秘命名函数表达式

    这是一篇转自汤姆大叔的文章:http://www.cnblogs.com/TomXu/archive/2011/12/15/2288411.html 前言 网上还没用发现有人对命名函数表达式进去重复深 ...

  2. JavaScript 事件兼容性写法

    1.以下是JavaScript事件兼容性写法,使用者可以随意使用,兼容所有浏览器.包括IE6(亲测) <!DOCTYPE html> <html> <head> & ...

  3. JavaScript权威指南 - 函数

    函数本身就是一段JavaScript代码,定义一次但可能被调用任意次.如果函数挂载在一个对象上,作为对象的一个属性,通常这种函数被称作对象的方法.用于初始化一个新创建的对象的函数被称作构造函数. 相对 ...

  4. 用javascript 写个函数返回一个页面里共使用了多少种HTML 标签

    今天我无意间看到一个面试题: 如何用javascript 写个函数返回一个页面里共使用了多少种HTML 标签? 不知你看到 是否蒙B了,如果是我 面试,肯定脑子嗡嗡的响.... 网上搜了搜也没有找到答 ...

  5. JavaScript基础学习-函数及作用域

    函数和作用域是JavaScript的重要组成部分,我们在使用JavaScript编写程序的过程中经常要用到这两部分内容,作为初学者,我经常有困惑,借助写此博文来巩固下之前学习的内容. (一)JavaS ...

  6. JavaScript 基础回顾——函数

    在JavaScript中,函数也是一种数据类型,属于 function 类型,所以使用Function关键字标识函数名.函数可以在大括号内编写代码并且被调用,作为其他函数的参数或者对象的属性值. 1. ...

  7. JavaScript正则表达式详解(二)JavaScript中正则表达式函数详解

    二.JavaScript中正则表达式函数详解(exec, test, match, replace, search, split) 1.使用正则表达式的方法去匹配查找字符串 1.1. exec方法详解 ...

  8. javascript立即执行函数

    javascript和其他编程语言相比比较随意,所以javascript代码中充满各种奇葩的写法,有时雾里看花;当然,能理解各型各色的写法也是对javascript语言特性更进一步的深入理解.  ( ...

  9. JavaScript 立即执行函数

    js中(function(){…})()立即执行函数写法理解 javascript和其他编程语言相比比较随意,所以javascript代码中充满各种奇葩的写法,有时雾里看花,当然,能理解各型各色的写法 ...

随机推荐

  1. HttpWebRequest 模拟浏览器访问网站

    最近抓网页时报错: 要么返回 The remote server returned an error: (442)要么返回: 非法访问,您的行为已被WAF系统记录! 想了想,就当是人家加了抓网页的东西 ...

  2. 使用ABP框架踩过的坑系列5

    DDD领域驱动开发,实际是为复杂的业务场景而生的,为了让开发人员专注于业务,而操作系统.数据库.网络之类的技术细节,必须要持久透明化:实际就是数据库系统DBMS的ORM抽象,目标就是业务不需要考虑数据 ...

  3. 如何把OpenWrt安装到PC?

    前言 什么是openwrt? 它是一个适用于路由器的Linux发行版.和其他Linux发行版一样,它也内置了包管理工具,你可以从一个软件仓库里直接安装软件.OpenWrt可以用在所有需要嵌入式Linu ...

  4. CentOS更改ssh端口

    https://blog.csdn.net/lukaixiao/article/details/74852375  来源处处. 注意!这里的Centos版本是7 step1 修改SELinux ech ...

  5. Android------------------ListVIew学习

    一.ListActivity :  如何你的Activity仅涉及到一个列表(ListVIew),那么你就该考虑使用ListActivity这个类 注意事项:1.ListActivity 里面默认包含 ...

  6. C++命令行画心形<转载>

    #include <stdio.h> int main() { for (float y = 1.5f; y > -1.5f; y -= 0.1f) { for (float x = ...

  7. jzoj2941

    我們可以暴力枚舉每一個人分幾個糖果,再暴力統計答案即可 每次遞歸下去可以從1-n號人,決定選多少個糖果再遞歸 #include<bits/stdc++.h> using namespace ...

  8. jzoj5806

    我們發現,如果有奇環顯然無解,因為我們每一次合併一個奇環,一定會產生一個偶環和一個更小的奇環,最終會形成一個三元環而無法合併 所以,這個圖需要是一個二分圖,需要進行二染色 然後把這個圖所有的偶環找出來 ...

  9. C++中将二维数组(静态的和动态的)作为函数的参数传递

    在C++编程中,我们经常将数组作为参数传递到另一个函数,数组的维数不同,传递方式也不同,此处将作一个总结,包括一维静态.动态数组,二维静态.动态数组. 一,一维数组(静态.动态一维数组) 1, 一维数 ...

  10. Python中的运算符与表达式

    你所编写的大多数语句(逻辑行)都包含了表达式(Expressions).一个表达式的简单例子便是 2+3.表达式可以拆分成运算符(Operators)与操作数(Operands).运算符(Operat ...