/** *@name getOwnJssData 获取设置data-jss这种方式的数据 *@param el *@param needInit *@return {Object} data / function getOwnJssData(el,needInit){ var data = el.__jssData; if(!data){ //匹配上key为data-jss适合在每个标签里面加data-jss=""这种方式 var s = el.getAttribute('data-jss'); if(s){ //进行{}包裹 if (!/^\s*{/.test(s)) { s = '{' + s + '}'; } //evalExp会把字符串转换成对象 //赋值给data和el.__jssData data = el.__jssData = evalExp(s); }else if(needInit){ data = el.__jssData = {}; } } //返回数据对象 return data; }
/** *@name getOwnJss *@param el *@param attributeName 指定对应的key为attributeName *@see getOwnJssData */ getOwnJss:function(el,attributeName){ var data = getOwnJssData(el); if(data && (attributeName in data)){ return data[attributeName]; } return undefined; }
结论:
- getOwnJss只是返回data-jss这种方式的数据,而且是第一个匹配元素的对应数据
/** *@name setJss *@param el *@param attributeName *@param attributeValue *@see getOwnJssData */ setJss:function(el,attributeName,attributeValue){ var data = getOwnJssData(el,true); data[attributeName] = attributeValue; }
/** *@name removeJss *@param el *@param attributeName *@see getOwnJssData */ removeJss:function(el,attributeName){ var data = getOwnJssData(el); if(data && (attributeName in data)){ //采用delete方式删除 delete data[attributeName]; //返回标志位,true代表删除操作完成 return true; } //返回标志位,默认false return false; }
/** *@name getJss *@param el *@param attributeName *@see getOwnJssData *@see getRuleData */ getJss:function(el,attributeName){ var data = getOwnJssData(el); if(data && (attributeName in data)){ return data[attributeName]; } //id var getRuleData = Jss.getRuleDate, id = el.id; //id是有规范的"#"+id if(id && (data = getRuleData("#" + id)) && (attributeName in data)){ return data[attributeName]; } //name var name = el.name; //name是有规范的"@"+name if(name && (data = getRuleData("@" + name)) && (attributeName in data)) { return data[attributeName]; } //className var className = el.className; //className是有规范的"."+className if(className){ //支持"classNameA classNameB classNameC" var classNames = className.split(" "); for(var i = 0;i<classNames.length;i++){ if((data = getRuleData('.'+classNames[i])) && (attributeName in data)){ return data[attributeName]; } } } //tagName var tagName = el.tagName; if(tagName && (data = getRuleData(tagName)) && (attributeName in data)){ return data[attributeName]; } return undefined; }
从getJss的设计得出一些结论:
- 获取的有一定的优先顺序:data-jss > #id > @name > .className > tagName
相关推荐
QWrap 是一个基于JavaScript的轻量级框架,旨在简化前端开发过程,提高代码的可维护性和性能。QWrap 的核心理念是提供一个简洁、高效且易于学习的API,让开发者可以快速构建交互丰富的Web应用。 在QWrap中,"wrap...
QWrap,源自百度有啊前端团队的创新之作,是一个专为JavaScript开发打造的高效、轻量级框架。这个框架的设计目标是简化Web应用的构建过程,提高开发效率,并且优化前端性能。QWrap的核心理念是模块化、组件化,使得...
jQuery的成功在于它提供了优秀的语法(文法)设计,如链式调用,以及良好的语义,如多态性,使得开发者可以用更少的代码完成更多的工作。"Write less, do more"是jQuery的精髓,但同时也提醒我们,没有一种语言或...
在IE8浏览器环境下,用户可能会遇到一个错误提示“Invalid procedure call or argument”,这个错误主要是指程序中进行了非法的过程调用或者传递了一个无效的参数。这个异常主要发生在JavaScript中,尤其是在使用...
3. **grid9_qwrap.js**:这是一个JavaScript文件,可能包含了处理网格布局和可能的查询功能的代码。"qwrap"可能代表查询包装器,用于处理用户的搜索请求或交互。 4. **bg_search_bar.png、bg-benefits.png**:这些...
QWrap库中的`QW.EventH.getEvent`静态方法提供了一个跨浏览器获取事件对象的解决方案。它首先检查是否已经提供了`event`对象,如果没有,则尝试从`element`对象或`window`对象中寻找。如果所有尝试都失败,它会遍历...
`qwrap`可能是一个用于封装或简化操作的工具,而`api.js`可能包含了与服务端交互的API(应用程序编程接口),用于动态加载数据或者处理用户交互。 4. **bg-benefits.png**、**network-broken.png**、**welcome.png*...
而Ext、Kissy、qwrap等框架则采用了方式2的分支写法,以求提高效率。 在选择使用哪种方式时,需要根据实际项目的规模、性能要求和维护成本来决定。对于需要高效率和良好性能的大型项目,可能会倾向于使用方式2。而...
pjax还支持本地存储和动画等高级功能,已经被多个JavaScript库如jQuery、QWrap和Kissy等实现。 7. DoS攻击(拒绝服务攻击): 题目中提到的12行JS代码是一个简单的DoS(Denial of Service)攻击示例。攻击者通过...
`grid9_qwrap.js` 是一个JavaScript文件,JavaScript通常用于增加网页的交互性和动态功能。在这个项目中,它可能是Grid9布局的JavaScript实现,用于处理用户交互、动画效果或者页面元素的动态行为。 `bg_search_bar...
今天在读Qwrap的源码stringH时里边有个 代码如下: format: function(s, arg0) { var args = arguments; return s.replace(/\{(\d+)\}/ig, function(a, b) { return args[(b | 0) + 1] || ”; }); } 它的使用方式是:...
压缩包子文件的文件名称列表看起来并不直接与HP网卡驱动相关,因为它们通常是网页设计或前端开发的资源文件,如CSS样式表(grid9_style.css)、HTML页面(new_page.html)、JavaScript脚本(grid9_qwrap.js、grid9_...
而我们过去有基于 Qwrap 的 suggest 组件,经过长时间业务使用,已经比较成熟,所以有了将它改造为 jQuery 版本的想法。 经过两天的修改、调试和修复 bug,基本完成了大部分工作。 基本使用方法 引入必要的 css 和 ...
为了更好地满足不同业务需求,各大互联网公司纷纷研发了自己的前端框架,如阿里的Kissy和Arale、腾讯的JX、百度的Tangram以及360的QWrap等。本文旨在探讨前端架构技术选型的原则与方法,并通过对比分析当前主流前端...