标签自定义属性,获取和操作的方法封装以及在此基础上对标签原有属性的扩展...
2013-08-11 20:45
786 查看
按照惯例,上代码,并不断完善中.
如上,我们可以在获取和操作html原有标签的属性。 同时如果该标签属性可以自定义,此时该属性的作用可以是标识的作用。在纯html操作中有一定的作用。
在代码:<input name="plfp" type="button" value="Handler my Code." /> 这块,我们绑定了其在点击和失去焦点时的两个动作,即完成了有时我们对html的控制。其中对element的操作沿用了get/set的编码习惯,使整体操作符合后端程序代码的习惯。
getAttributes方法是将初始时element标签里的现有属性和对应的值维护成一个map,使操作者在获取其属性,特别是自定义属性时更加方便。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
以上代码中存在一些列的bug,如针对innerHTML这种大小写的属性,在原生attributes中会被自动转换为小写,因此根据处理程序处理的set/get方法分别是:setInnerhtml/getInerhtml,其方法内部的属性则为this.innerhtml 此时调用set方法也无法使其完成与element.innerHtml='Another code'的功能。
(-------------------------周五之前发现的bug.未及时找到解决办法)
今日郑州漂泊大雨+冰雹...
--以下是刚刚淋雨时想到的,嘎嘎.....
我尚未查看其他一些JS框架是如何对dom进行这类封装的。我现在仅仅是猜测:
维护所有dom标签,以及对应的属性(这些东东都是标准,因此绝对可以这么做的),根据获取的标签类型来初始其相应的get/set方法。理论上这种是可行的,在以上核心处理代码中进行相应的处理优化是可以达到这种效果的~~我就不再亲自试验了,这明显是可行的。针对大小写的属性,专门维护一个对应关系也可以将我先前说的这类bug消除的。
当然即使这么做了也仅仅是雏形,JS框架的搭建结构还是比较重要的,不然ExtJS和Jquery就不会有各自特点了。thinking...........................................
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title> New Document </title> <meta name="Generator" content="EditPlus"> <meta name="Author" content=""> <meta name="Keywords" content=""> <meta name="Description" content=""> </head> <script type="text/javascript"> <!-- //封装处理过程 var fzgcFn = function(element){ if(element.isInit) return element; var attributes = element.attributes; var map = {}; for(var i=0,len=attributes.length;i<len;i++){ map[attributes[i]['nodeName']] = attributes[i]['nodeValue']; //闭包处理 (function(element,attribute){ var nodeName = attribute['nodeName']; var nodeName_ = nodeName.substring(0,1).toUpperCase()+nodeName.substring(1,nodeName.length); var nodeValue = attribute['nodeValue']; //set方法---更改两个地方 element['set'+nodeName_] = function(){ nodeValue = arguments[0]; attribute['nodeValue'] = nodeValue; this[nodeName] = nodeValue; //return this;//想实现链式~ }; //get方法 element['get'+nodeName_] = function(){ return this[nodeName]; }; })(element,attributes[i]); } element['getAttributes'] = function(key){ return map[key]; }; element.isInit = true; return element; } var bindDomAddlistner = function(id,fn,scope){ var obj = document.getElementById(id); obj.onclick = function(e){ var element = e.target; element = fzgcFn(element); var name = element.getAttributes("name"); fn.call(scope||this,e,element,name); }; return obj; } window.onload = function(){ var i = 0; bindDomAddlistner('myDiv',function(event,element,name){ //console.log(element); //console.log(element.getAttributes("name")); //console.log(element.setName('ssss').getName()); //console.log(element.setName('ssss')); //console.log(element.getName()); if(name=='zyld'){ console.log(element); console.log(element.checked); console.log(element.getChecked()); if(i>2){ if(element.getChecked()){element.setChecked(false);}; } i++; /* element.setChecked(false); console.log(element.getChecked()); console.log(element);*/ } if(name=='link'){ element.setValue(Math.random()); } if(name=='plfp'){ element.setType("text"); element.onblur = function(e){ var value = element.getValue(); element.setType("button"); element.setValue(value); } //disabled //element.setDisabled(true); /*this.setTimeOut4Sys(function(interVal,time){ if(time==0){ //element.setDisabled(false); clearInterval(interVal); } },10);*/ } //innerHTML 这种的大小写的不可... },this); } //--> </script> <body> <div id="myDiv" name="ok" > <input name="zyld" checked=true type="checkbox" /> <label name="link" innerHTML="">Link~~something</label> <input name="plfp" type="button" value="Handler my Code." /> disabled="false" </div> </body> </html>
如上,我们可以在获取和操作html原有标签的属性。 同时如果该标签属性可以自定义,此时该属性的作用可以是标识的作用。在纯html操作中有一定的作用。
在代码:<input name="plfp" type="button" value="Handler my Code." /> 这块,我们绑定了其在点击和失去焦点时的两个动作,即完成了有时我们对html的控制。其中对element的操作沿用了get/set的编码习惯,使整体操作符合后端程序代码的习惯。
getAttributes方法是将初始时element标签里的现有属性和对应的值维护成一个map,使操作者在获取其属性,特别是自定义属性时更加方便。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
以上代码中存在一些列的bug,如针对innerHTML这种大小写的属性,在原生attributes中会被自动转换为小写,因此根据处理程序处理的set/get方法分别是:setInnerhtml/getInerhtml,其方法内部的属性则为this.innerhtml 此时调用set方法也无法使其完成与element.innerHtml='Another code'的功能。
(-------------------------周五之前发现的bug.未及时找到解决办法)
今日郑州漂泊大雨+冰雹...
--以下是刚刚淋雨时想到的,嘎嘎.....
我尚未查看其他一些JS框架是如何对dom进行这类封装的。我现在仅仅是猜测:
维护所有dom标签,以及对应的属性(这些东东都是标准,因此绝对可以这么做的),根据获取的标签类型来初始其相应的get/set方法。理论上这种是可行的,在以上核心处理代码中进行相应的处理优化是可以达到这种效果的~~我就不再亲自试验了,这明显是可行的。针对大小写的属性,专门维护一个对应关系也可以将我先前说的这类bug消除的。
当然即使这么做了也仅仅是雏形,JS框架的搭建结构还是比较重要的,不然ExtJS和Jquery就不会有各自特点了。thinking...........................................
相关文章推荐
- jquery的attr方法与ie7不兼容,js获取html标签自定义属性
- jQuery和js一些标签属性的获取和修改方法以及区别
- java进阶之反射:反射基础之如何获取一个类以及如何获取这个类的所有属性和方法(1)
- extjs6 基础组件扩展和自定义组件封装--04静态js方法的设计思想
- js 点击a标签 获取a的自定义属性方法
- android自定义View构造方法以及获取自定义属性详解
- s 点击a标签 获取a的自定义属性方法_javascript技巧
- 【Python_OpenCv】笔记4:python,OpenCv中对图片像素的操作以及图片基本属性的获取方法
- 利用AOP获取自定义标签的参数以及方法的参数
- java进阶之反射:反射基础之如何获取一个类以及如何获取这个类的所有属性和方法(2)
- Android基础教程——在TextView中显示Html 自定义标签,获取标签属性
- 扩展jQuery easyui tabs组件,实现根据id(或者自定义属性)操作tab标签
- 4.2、JS——var 数据类型 节点标签属性操作 动态获取方法
- extjs6 基础组件扩展和自定义组件封装--03全局方法、变量介绍
- js封装获取标签处理操作 ,ajax,ready()方法
- AngularJs基础——自定义服务的三种方法以及provider供应商
- JavaScript 获取HTML中的CSS样式的属性以及值的的方法。
- jquery操作checked属性以及disabled属性的多种方法
- 去掉input边框的原有属性和去掉a标签样式的方法
- 使用SystemProperties获取系统属性以及数据库读写操作