`
enix2212
  • 浏览: 25155 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

核心只要两行即可实现添加或移除className

阅读更多
<div id="abc" class="same new yes">1111111</div>




改进版 只有一行

function removeClass(value){
	var kls,reg=1>0 &&(kls=this.className,reg=new RegExp('(^| )'+value+'( |$)'),reg.test(this.className) && (this.className=(kls.replace(reg,'$1')).replace(/ $/,''))); 
	return this;
};
function addClass(value){
	var reg=1>0 &&(reg=new RegExp('(^| )'+value+'( |$)'),reg.test(this.className) || (this.className==='' ? (this.className=value) : (this.className+=(' '+value))));
	return this;
};
	
///removeClass.call(document.getElementById('abc'),'new');
//addClass.call(document.getElementById('abc'),['new saw try']) 一次添加多个样式 
addClass.call(addClass.call(removeClass.call(document.getElementById('abc'),'new'),'game'),'beta');



javascript确实很有意思 语法灵活 就看怎么玩
分享到:
评论
31 楼 stoneskin 2011-05-11  
:哭笑
写javascript的也是猿。。。。
我们很多猿都是从写html过来的。。
现在有时还时不时回去写点script,改改css.
30 楼 jamesmos 2011-05-04  
enix2212 写道
tiannet 写道
enix2212 写道


而且我不认为 这个是对自己量身定做 试想谁会写class的时候去敲回车 就算有可能 但这个肯定不是所提倡的编码方式 我们没有为别人的错误买单 多开发99%的代码 而且我说过 我不是在写类库 没必要考虑所有人的感受


给你点建议:别人给你指出代码的问题其实是在帮助你,应该感谢才对,可楼主似乎很生气?这种行为要不得。

另外,对于写程序来说,强调的就是严谨啊!既然语法允许换行,那就应该考虑这种情况啊。
试想一下,项目组的某个成员正好用了你的这个函数,然后又刚好不小心把className换了行,那他得花费多长时间去找原因啊?
我们程序员写的大部分代码,不都是为了应对使用者的疏忽、不正常操作么?


在这个问题上猿还是回避吧

只能我们狮直接讨论 猿什么时候会写html了


我觉得你分这么开是真没必要的。话说javascript虽然在浏览器上跑,而且大部分时间都用来做交互和界面,但其实也算得上编程语言了。没有程序员的严谨,吃亏是迟早的事。
29 楼 enix2212 2011-05-04  
tiannet 写道
enix2212 写道


而且我不认为 这个是对自己量身定做 试想谁会写class的时候去敲回车 就算有可能 但这个肯定不是所提倡的编码方式 我们没有为别人的错误买单 多开发99%的代码 而且我说过 我不是在写类库 没必要考虑所有人的感受


给你点建议:别人给你指出代码的问题其实是在帮助你,应该感谢才对,可楼主似乎很生气?这种行为要不得。

另外,对于写程序来说,强调的就是严谨啊!既然语法允许换行,那就应该考虑这种情况啊。
试想一下,项目组的某个成员正好用了你的这个函数,然后又刚好不小心把className换了行,那他得花费多长时间去找原因啊?
我们程序员写的大部分代码,不都是为了应对使用者的疏忽、不正常操作么?


在这个问题上猿还是回避吧

只能我们狮直接讨论 猿什么时候会写html了
28 楼 tiannet 2011-05-04  
enix2212 写道


而且我不认为 这个是对自己量身定做 试想谁会写class的时候去敲回车 就算有可能 但这个肯定不是所提倡的编码方式 我们没有为别人的错误买单 多开发99%的代码 而且我说过 我不是在写类库 没必要考虑所有人的感受


给你点建议:别人给你指出代码的问题其实是在帮助你,应该感谢才对,可楼主似乎很生气?这种行为要不得。

另外,对于写程序来说,强调的就是严谨啊!既然语法允许换行,那就应该考虑这种情况啊。
试想一下,项目组的某个成员正好用了你的这个函数,然后又刚好不小心把className换了行,那他得花费多长时间去找原因啊?
我们程序员写的大部分代码,不都是为了应对使用者的疏忽、不正常操作么?
27 楼 dfbdfbdfb 2011-05-04  
支持楼主,有些人就是喜欢不看帖子的重点,鸡蛋里挑骨头,显摆
26 楼 leelege 2011-05-03  
楼主这么喜欢三元运算符,可以尝试多个条件下对三元运算符进行嵌套,那写出来的代码过一阵再去看……啧啧
25 楼 cpdw 2011-05-03  
这种问题有必要争个脸红脖子粗吗?无聊啊
24 楼 vb2005xu 2011-05-02  
// css class relative
this.hasClass = function(name) {
var re = new RegExp('(^| )' + name + '( |$)');
return re.test(this.ele.className) ;
};
this.addClass = function(name) {return this.toggleClass(name,true) ;};
this.removeClass = function(name) {return this.toggleClass(name,false) ;};
this.toggleClass = function (name,cond) {
if (typeof name == __undef) this.ele.className = '' ;
else {
var re = new RegExp('(^| )' + name + '( |$)');
var had = re.test(this.ele.className) ;
if (typeof cond != __undef){
if (cond){
if (!had) this.ele.className += ' ' + name;
}else
if (had) this.ele.className = this.ele.className.replace(re, ' ');
}else
this.ele.className = had ? this.ele.className.replace(re, ' ') : this.ele.className + ' ' + name ;

re = had = null ;
}
return this ;
};
23 楼 enix2212 2011-05-02  
前端代码是为了看明白么 典型的程序猿的思维 前端代码很多时候就是为了安全 让人看不懂甚至去混淆 我这个已经封装完了 传递的参数也很明确 拿去用就好了 没必要去了解内部运作 jQuery的理念也是 统一接口 内部的高耦合使用者没必要了解 不看jquery源码能写出漂亮代码? 这个有不是写教科书 有必要写20行再加上注释 让别人了解怎么工作的么 较少复杂程度 写上注释 那是服务器语言 前端脚本上线前必须删除注释 压缩代码 混淆 不是一个纯正的FE相信你们也不会了解 服务器语言会经过编译等等手段 前端代码怎么实现加密 只能通过这些手段 莫非我脚本里面写上 我这用了个jsonp数据 是个公开接口 你也可以用我们公司的数据 而且我还告不了你 这样才算好代码?


请问 你们讨论前看我后面更新的代码了没有

比如说 让你去生成一个字符串10次
你是用for 生成 还是以下方法有技术含量

String.prototype.repeat=function(a){
   return (new Array(a+1)).join(this);
};

alert('ab'.repeat(5));




编码 做事每个人都有自己的理念
职业也有规矩
前端代码的要求就是少 快 好 省
也许我现在还全部做不到
但是我希望大家能角色代入 不要以程序员的思维来对待
22 楼 jamesmos 2011-05-02  
rainsilence 写道
function addClass(value){  
    var reg=new RegExp('(^| )'+value+'( |$)');  
    reg.test(this.className) || (this.className==='' ? (this.className=value) : (this.className+=(' '+value)));  
    return this;  
}


改为
function addClass(value){  
    (this.className.indexOf(value) != -1) || (this.className==='' ? (this.className=value) : (this.className+=(' '+value)));  
    return this;  
}


更好
帮你省了一行,而且复杂度下降了一个层次



你写的这个在功能上是不满足要求的,很简单的例子就是尝试给className为"sampleClass"的元素添加"sample"

21 楼 rainsilence 2011-05-02  
function addClass(value){  
    var reg=new RegExp('(^| )'+value+'( |$)');  
    reg.test(this.className) || (this.className==='' ? (this.className=value) : (this.className+=(' '+value)));  
    return this;  
}


改为
function addClass(value){  
    (this.className.indexOf(value) != -1) || (this.className==='' ? (this.className=value) : (this.className+=(' '+value)));  
    return this;  
}


更好
帮你省了一行,而且复杂度下降了一个层次
20 楼 hite 2011-05-01  
int08h 写道
算了,每个人都有自己的坚持自己的理念,编程说低端点就是敲敲键盘,说高端点其实是每个人自己的哲学,也没啥好争的


风度啊!如此涵养。关注你
19 楼 zhouYunan2010 2011-05-01  
jamesmos 写道
enix2212 写道
为的是把10行代码搞成一行 现在又要搞回去? 我写样式肯定不会敲回车 如果有需要 你自行修改 再说 我也不相信你每次写样式都会敲回车吧 那这些判断 有何意义


你这种缩短代码的方式是用逻辑运算符和三元运算符来代替条件判断,最后是一行长过别人三行,效率还不一定高,意义大么?你发个自己写的东西在这里说有多短多短,结果是为你自己的需求量身定做的,别人要用还要自己进行逻辑上的完善,再短又有何意义?

hello world 写道
对啊,我也这样认为
18 楼 qianshuiqs 2011-05-01  
作为万年潜水员,我忍不住问问,你写这个方法的同时有考虑到了可读性了吗,可能是我以前没看过用三元运算符代理if/else的写法,正则表达式什么的都没什么,关键是这个三元运算符到底什么意思我看了半天,这样子做似乎也并没有减少多少代码量,还增加了理解难度。
17 楼 int08h 2011-05-01  
三元运算和if/else生成的语法树是一样的,这个没啥好讨论的吧……
jQuery在前端向来是被认为可读性极差、可用性极高的库,从使用的角度来说jQuery是优秀的,但其兼容性也是无上的,就好比这个className的问题,jQuery在升级到1.5的时候,还特地把\t作为分隔符考虑了进去
但是jQuery作为源码学习是不合适的,远不如prototype/underscore/Ext/tangram/kissy/qwrap等库,所谓的“代码竟然能这样写”很多时候其实是bad smell而已
16 楼 jamesmos 2011-04-30  
enix2212 写道
其实 if else  三元 逻辑运算的本质都是在求布尔的运算 只要得到布尔值就能进行运算了 所以 简化if else 都是有意义的
我这个大的表达式不止使用了 三元 逻辑 还有连续运算 尤其这个连续运算 我觉得这个才是这个出彩的地方 而且 声明变量 赋值 连续运算可以一行完成 这个语言真的是很棒

而且看过jquery源码 有时候会拍桌 擦 代码还能这样写 有点这种意思

而且 没有更充分的证据 我能相信的肯定是ncz或者高性能建站


而且我不认为 这个是对自己量身定做 试想谁会写class的时候去敲回车 就算有可能 但这个肯定不是所提倡的编码方式 我们没有为别人的错误买单 多开发99%的代码 而且我说过 我不是在写类库 没必要考虑所有人的感受


代码不一定是手工写出来的。比如使用模板编译出的html文档,完全有可能出现各种你觉得不合理的现象。当然,你觉得到那时候出现问题再来改,那也是可以的;但如果这个工作不是由你亲自来做了呢?你的接手人就不一定能立马想到问题出在哪里。
15 楼 enix2212 2011-04-30  
其实 if else  三元 逻辑运算的本质都是在求布尔的运算 只要得到布尔值就能进行运算了 所以 简化if else 都是有意义的
我这个大的表达式不止使用了 三元 逻辑 还有连续运算 尤其这个连续运算 我觉得这个才是这个出彩的地方 而且 声明变量 赋值 连续运算可以一行完成 这个语言真的是很棒

而且看过jquery源码 有时候会拍桌 擦 代码还能这样写 有点这种意思

而且 没有更充分的证据 我能相信的肯定是ncz或者高性能建站


而且我不认为 这个是对自己量身定做 试想谁会写class的时候去敲回车 就算有可能 但这个肯定不是所提倡的编码方式 我们没有为别人的错误买单 多开发99%的代码 而且我说过 我不是在写类库 没必要考虑所有人的感受
14 楼 jamesmos 2011-04-30  
客户端代码的短是有意义,但在脚本压缩和客户端缓存的作用下,这种程度的缩短(十行缩短到五行,结果只节省了5个字节)所产生的意义是非常有限的。当然,你能够根据自己的需求牺牲一些通用性而进一步缩短,对你自己来说这是完全值得肯定的(这也是我所说的量身定做的意思)。而如果你在应对自己的需求进行缩减处理的过程中有很巧妙的地方,和大家分享出来也是很有价值的行为。
13 楼 jamesmos 2011-04-30  
enix2212 写道
jamesmos 写道
enix2212 写道
为的是把10行代码搞成一行 现在又要搞回去? 我写样式肯定不会敲回车 如果有需要 你自行修改 再说 我也不相信你每次写样式都会敲回车吧 那这些判断 有何意义


你这种缩短代码的方式是用逻辑运算符和三元运算符来代替条件判断,最后是一行长过别人三行,效率还不一定高,意义大么?你发个自己写的东西在这里说有多短多短,结果是为你自己的需求量身定做的,别人要用还要自己进行逻辑上的完善,再短又有何意义?



三元没有 if else 效率高??
看来你不懂js
为自己量身定做? 这个和开源就要免费的论调基本一致吧 再说就算我是为自己量身定做的 而且我也说了 这个语言很强大 很灵活 多行的可以一行完成 我没有强烈要求你一行两行  我有没要求大家用我的 你何苦纠缠不清 效率不高你可以弄个一行高的 共同学习进步嘛 客户端代码短没有意义吗? 起码占用的字节少了吧




关于三元运算符与if条件判断谁效率高这个问题,我真心希望你的自信不是来自于教科书。
前几天有个帖子在讨论StringBuffer的效率问题,回帖里就没几个正确的,还有人去把教科书上的分析过程复制了一段贴上去,结果呢?那个问题我是之前亲自试验过的,所以很干脆的就回帖了。今天这个问题我之前确实是没做个测试,但我知道在php里,三元运算符效率是没有if else条件判断高的,另一方面是凭我个人的直觉。我也是个认真的人,看到你这么自信满满的,我就想会不会是我错了,于是粗略的写了个测试,最后发现这个问题是真没有定论,在不同浏览器下,甚至在不同的测试样本之下,结果都是不一样的。我把测试页面传到网上了,你有兴趣可以去试试看,也算是个共同学习的过程吧。

地址:http://home.ustc.edu.cn/~kkjames/test/testCh.html
12 楼 enix2212 2011-04-30  
jamesmos 写道
enix2212 写道
为的是把10行代码搞成一行 现在又要搞回去? 我写样式肯定不会敲回车 如果有需要 你自行修改 再说 我也不相信你每次写样式都会敲回车吧 那这些判断 有何意义


你这种缩短代码的方式是用逻辑运算符和三元运算符来代替条件判断,最后是一行长过别人三行,效率还不一定高,意义大么?你发个自己写的东西在这里说有多短多短,结果是为你自己的需求量身定做的,别人要用还要自己进行逻辑上的完善,再短又有何意义?



三元没有 if else 效率高??
看来你不懂js
为自己量身定做? 这个和开源就要免费的论调基本一致吧 再说就算我是为自己量身定做的 而且我也说了 这个语言很强大 很灵活 多行的可以一行完成 我没有强烈要求你一行两行  我有没要求大家用我的 你何苦纠缠不清 效率不高你可以弄个一行高的 共同学习进步嘛 客户端代码短没有意义吗? 起码占用的字节少了吧

相关推荐

    jQuery属性 toggleClass()方法添加和移除

    `classname`是CSS类名,是我们想要添加或移除的类。 2. **操作类的状态**: - 如果元素上还没有指定的`classname`,toggleClass()会将这个类添加到元素上。 - 如果元素上已经有了这个`classname`,toggleClass()...

    Javascript 检测、添加、移除样式(className)函数代码

    它创建了一个正则表达式,该表达式会在字符串`element.className`中查找类名的开始或结束处的空格或开头(这确保了类名前后没有多余空格)。如果匹配成功,说明元素包含该样式类,返回`true`;否则,返回`false`。 ...

    基于JavaScript实现类名的添加与移除

    方法1:使用className属性; 方法2:使用classList API; //用于匹配类名存在与否 function reg(name){ return new RegExp('(^|\\s)'+name+'(\\s+|$)'); } //hasClass addClass removeClass toogleClass var ...

    js实现简单的className不兼容问题

    使用封装的思想,简单的实现IE浏览器在javascript中对getElementsByClassName的不兼容问题,实现的方法简单,通俗易懂

    vue鼠标移入添加class样式,鼠标移出去除样式(active)实现方法

    本文将详细介绍如何在Vue项目中实现鼠标移入时添加一个class样式,而鼠标移出时则移除该样式(通常是添加或移除名为"active"的class),以及相关的实现方法和拓展知识。 首先,要在Vue组件中实现鼠标移入移出的...

    纯js实现行的添加删除

    本文将深入探讨如何使用纯JavaScript实现动态的行添加与删除功能,尤其关注在特定条件下的按钮显示逻辑。这个功能通常应用于表格或者列表的管理,比如在线表单、任务列表等。 首先,我们需要创建一个基础的HTML结构...

    查看ClassName的小工具

    查看ClassName的小工具,能看到任意控件的ClassName和Text属性

    图片添加相框的前端实现

    "图片添加相框的前端实现"这个主题,就是关于如何在不依赖大量美工作图的情况下,通过前端技术优雅地为图片添加相框。在实际应用中,这种需求通常出现在如瀑布流布局等场景,它能增加视觉效果,提升用户体验。 首先...

    判断文字超过2行添加展开按钮,未超过则不显示,溢出部分显示省略号

    以下是一个简单的JavaScript实现,用于检测元素的高度并根据需要添加或移除展开按钮: ```javascript // 遍历含有教师评语的元素 $('.teacher-review').forEach(function(v, i) { // 使用flexible.js进行移动端...

    javaScript给元素添加多个class的简单实现.docx

    ### JavaScript给元素添加多个class的简洁实现 #### 概述 在Web开发中,通过JavaScript动态地为HTML元素添加或删除CSS类名是一项常见的需求。本文档将详细介绍如何使用JavaScript来给HTML元素添加多个class,并...

    react-body-classname, 声明性嵌套状态化同构的body.className.zip

    react-body-classname, 声明性嵌套状态化同构的body.className react-body-classname 提供在 React App 中指定 document.body.className的声明方式。 支持服务器端使用。内置的反应副作用。安装yarn add react-bo

    页面滚动时为元素动态添加class类的jquery插件

    `jQuery-scrollAddclass` 插件正是为此而设计,它允许开发者在元素进入浏览器视口时为其添加预设的class,从而实现丰富的视觉效果。 ### 插件安装与引入 在使用`jQuery-scrollAddclass`之前,你需要确保已经引入了...

    jQuery点击添加到购物车动画代码

    jQuery通过选择器(如$("#elementID")或$(".className"))来定位DOM元素,然后可以对这些元素进行各种操作。在这个场景中,我们可能有一个或多个商品元素,它们可能具有特定的类名或ID,用于标识可添加到购物车的项...

    js 利用className得到对象的实现代码

    6. 实现样式的切换:在onmouseover事件中,将元素的className设置为“input_current”,而在onmouseout事件中则将className改回“input_ocurrent”,这样实现了鼠标悬停时的样式变化。 7. 页面加载时执行脚本:通过...

    jQuery.toggleClass() 函数详解

    `toggleClass()` 是 jQuery 库中的一个常用函数,用于切换(添加或移除)一个或多个 CSS 类名到被选元素上。此方法允许开发者根据条件动态地改变网页的样式。 #### 二、函数签名与版本历史 `toggleClass()` 方法...

    python学习day14.txt

    添加id或class属性,对应选择器,为元素添加样式 2. addClass('className') 将className作为值添加到元素的class属性上 是可以连缀调用的 $('h1').addClass('c1').addClass('c2')... 3. ...

    element-ui 的el-button组件中添加自定义颜色和图标的实现方法.docx

    添加自定义颜色和图标的实现方法可以分为两步:第一步,我们需要在 Element UI 的源码中添加一个自定义的全局指令;第二步,我们需要在项目公共的 js 中编写自定义的指令。 首先,让我们来添加自定义的全局指令。在...

Global site tag (gtag.js) - Google Analytics