当前位置:  编程技术>WEB前端
本页文章导读:
    ▪重构Javascript代码      今天有做了几个asp.net结合Javascript的教程文章。现回顾头来看看那些Javascript脚本,有写得不太理想,过于复杂。现Insus.NET抽取出来,重构它们。第一篇是http://www.cnblogs.com/insus/archive/2013/01/20/286.........
    ▪jQuery attributes(下)      前文对属性的设置、读取、删除方法做了分解,本文继续对jQuery attributes模块分解。 jQuery.fn.addClass/************************************ * value: 字符串或者是函数,字符串可以通过空格分隔classNam.........
    ▪jQuery中bind,live,delegate与one方法的用法及区别              bind( )方法用于将一个处理程序附加到每个匹配元素的事件上并返回jQuery对象。     .bind(eventType[, evnetData], Handler(eventObject))     其中,参数eve.........

[1]重构Javascript代码
    来源:    发布时间: 2013-11-06

今天有做了几个asp.net结合Javascript的教程文章。现回顾头来看看那些Javascript脚本,有写得不太理想,过于复杂。现Insus.NET抽取出来,重构它们。

第一篇是http://www.cnblogs.com/insus/archive/2013/01/20/2868532.html 原来的Javascript脚本:

function SelectedAll(cb) {
cb.checked = cb.checked ? false : true;
var gv = document.getElementById('<%=GridViewCouplets.ClientID %>');
var rc = gv.rows.length;

for (var i = 1; i < rc; i++) {
var input = gv.rows[i].cells[0].getElementsByTagName("input");
if (input[0].type == "checkbox" && input[0].checked) {
input[0].checked = false;
gv.rows[i].style.backgroundColor = "";
}
else {
input[0].checked = true;
gv.rows[i].style.backgroundColor = "#66ff33;";
}
}
}

function SelectedSingle(cb) {
var row = cb.parentNode.parentNode;
if (cb.checked) {
row.style.backgroundColor = "#66ff33;";
}
else {
row.style.backgroundColor = "";
}
}


经过重构之后的Javascript脚本:

function SelectedAll(cb) {
var gv = document.getElementById('<%=GridViewCouplets.ClientID %>');
var rc = gv.rows.length;

for (var i = 1; i < rc; i++) {
var input = gv.rows[i].cells[0].getElementsByTagName("input");

if (input[0].type == "checkbox")
{
input[0].checked = cb.checked;
gv.rows[i].style.backgroundColor = input[0].checked ? "#66ff33;" :"";
}
}
}

function SelectedSingle(cb) {
var row = cb.parentNode.parentNode;
row.style.backgroundColor = cb.checked? "#66ff33;":"";
}


另外一篇http://www.cnblogs.com/insus/archive/2013/01/20/2868766.html 原来的Javascript脚本:

function Check_Uncheck_All(cb) {
var cbl = document.getElementById("<%=CheckBoxListMusicType.ClientID%>");
var input = cbl.getElementsByTagName("input");

if (cb.checked) {
for (var i = 0; i < input.length; i++) {
input[i].checked = true;
}
}
else {
for (var i = 0; i < input.length; i++) {
input[i].checked = false;
}
}
}


重构之后的Javascript脚本:

function Check_Uncheck_All(cb) {
var cbl = document.getElementById("<%=CheckBoxListMusicType.ClientID%>");
var input = cbl.getElementsByTagName("input");

for (var i = 0; i < input.length; i++) {
input[i].checked = cb.checked;
}
}

 

本文链接


    
[2]jQuery attributes(下)
    来源:    发布时间: 2013-11-06

前文对属性的设置、读取、删除方法做了分解,本文继续对jQuery attributes模块分解。

 

jQuery.fn.addClass

/************************************
* value: 字符串或者是函数,字符串可以通过空格分隔className
*/
jQuery.fn.addClass = function( value ) {
var classes, elem, cur, clazz, j,
i = 0,
len = this.length,
proceed = typeof value === "string" && value;

//如果value是函数
if ( jQuery.isFunction( value ) ) {
//则对所有元素迭代运行addClass
return this.each(function( j ) {
jQuery( this ).addClass( value.call( this, j, this.className ) );
});
}

//如果value是字符串
if ( proceed ) {
// 对value字符串分割成数组
classes = ( value || "" ).match( core_rnotwhite ) || [];

//遍历元素
for ( ; i < len; i++ ) {
elem = this[ i ];
//如果节点是元素,则获取原来的className
cur = elem.nodeType === 1 && ( elem.className ?
( " " + elem.className + " " ).replace( rclass, " " ) : //替换掉换行符制表符等
" "
);

//如果cur不为false,即节点是元素
if ( cur ) {
j = 0;
//遍历classes组装成新的className应有的值
while ( (clazz = classes[j++]) ) {
if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
cur += clazz + " ";
}
}
//对className赋值,去掉头尾空白
elem.className = jQuery.trim( cur );

}
}
}

return this;
};

添加class的实现上还是比较简单的,利用elem.className来赋值。需要注意:

var rclass = /[\t\r\n]/g;

 

jQuery.fn.removeClass

jQuery.fn.removeClass = function( value ) {
var classes, elem, cur, clazz, j,
i = 0,
len = this.length,
//参数是否正确
proceed = arguments.length === 0 || typeof value === "string" && value;

//如果value是函数
if ( jQuery.isFunction( value ) ) {
//则对所有元素迭代运行removeClass
return this.each(function( j ) {
jQuery( this ).removeClass( value.call( this, j, this.className ) );
});
}

//如果参数正确
if ( proceed ) {
//分隔value成为class字符串数组
classes = ( value || "" ).match( core_rnotwhite ) || [];

//遍历
for ( ; i < len; i++ ) {
elem = this[ i ];
// 获取className并进行预处理
cur = elem.nodeType === 1 && ( elem.className ?
( " " + elem.className + " " ).replace( rclass, " " ) :
""
);

//如果是元素
if ( cur ) {
j = 0;
//遍历所有class字符串
while ( (clazz = classes[j++]) ) {
// 寻找是否有对应的字符串
while ( cur.indexOf( " " + clazz + " " ) >= 0 ) {
//有则去掉
cur = cur.replace( " " + clazz + " ", " " );
}
}
//给className赋值,并去掉头尾空格
elem.className = value ? jQuery.trim( cur ) : "";
}
}
}

return this;
};

删除class的实现和addClass非常像,只是通过indexOf和replace来替换掉需要删除的class。

 

jQuery.fn.toggleClass

jQuery.fn.toggleClass = function( value, stateVal ) {
var type = typeof value,
isBool = typeof stateVal === "boolean";


    
[3]jQuery中bind,live,delegate与one方法的用法及区别
    来源: 互联网  发布时间: 2013-11-06

 

      bind( )方法用于将一个处理程序附加到每个匹配元素的事件上并返回jQuery对象。

    .bind(eventType[, evnetData], Handler(eventObject))

    其中,参数eventType是一个字符串,包含一个或多个javaScript事件类型,例如click,submit或自定义事件的名称,指定多个事件类型时用空格分隔各个类型;eventData为Map类型,给出要传递给事件处理程序的数据,handler指定触发该事件时要执行的函数,eventObject表示事件对象。

  .bind()方法将事件处理程序handler附加到匹配元素集合中的每个元素的eventType事件上,如果需要,还可以向事件处理程序传递数据。


     live( )方法将一个事件处理程序附加到与当前选择器匹配的所有元素(包含现有的或将来添加的)的指定事件上并返回jQuery对象。

    .live(eventType,[eventData],handler)

    其中,参数eventType是一个字符串,包含一个或多个javaScript事件类型,例如click,keydown或自定义事件的名称,eventData是可选参数,为Map类型,给出要传递给事件处理程序的数据,该参数是在jQuery1.4中添加的;handler是一个函数,当触发该事件时将执行这些函数

   .live()方法将事件处理程序handler附加到每个匹配元素(包含当前存在的和将来添加的)的eventType事件上,必要时还可以使用参加eventData向事件处理程序传递数据。

    .live()方法是基本的.bind()方法的一个变形,后者可以将事件处理程序附加到元素·,当调用.bind()时,jQuery对象匹配的元素将被附加上事件处理程序,但以后添加的元素并不会被附加该事件处理程序,因此,还需要对这些元素再次调用.bind()方法。


   .one()方法将事件处理程序附加到匹配元素的指定事件并返回jQuery对象。所附加的事件处理程序最多只能执行一次。

    .one(eventType,[eventData],handler(eventObject))


       其中,参数eventType是一个字符串,包含一个或多个javaScript事件类型,例如click,submit或自定义事件的名称,指定多个事件类型时用空格分隔各个类型;eventData为Map类型,给出要传递给事件处理程序的数据,handler指定触发该事件时要执行的函数,eventObject表示事件对象。


    .one()方法与.bind()类似,所不同的是,使用.one()绑定的事件处理程序在执行一次之后将自动取消绑定。


      .delegate()方法基于一组特定的根元素将处理程序附加到匹配选择器的所有元素(现有的或将来的)的一个或多个事件上。

       .delegate(selector,eventType[,eventData],handler)

      其中,参数 selector是一个选择器,用于筛选触发事件的元素;eventType是一个字符串,指定一个或多个JavaScript事件类型(多个事件用空格分隔),例如click,keydown或自定义事件名称;eventData为映射类型,表示要传递给事件处理程序的数据;handler表示触发该事件时执行的函数。

     .delegate()与.live()类似,可将每个事件的绑定委托给指定的DOM元素。



作者:yilanyoumeng3 发表于2013-1-21 9:34:39 原文链接
阅读:95 评论:0 查看评论

    
最新技术文章:
▪css white-space:nowrap属性用法(可以强制文字不...
▪IE里button设置border:none属性无效解决方法
▪border:none与border:0使用区别
▪html清除浮动的6种方法示例
▪三个不常见的 HTML5 实用新特性简介
▪css代码优化的12个技巧
▪低版本IE正常运行HTML5+CSS3网站的3种解决方案
▪CSS Hack大全-教你如何区分出IE6-IE10、FireFox、Chr...
▪ie6,ie7,ie8完美支持position:fixed的终极解决方案
▪小技巧处理div内容溢出
▪html小技巧之td,div标签里内容不换行
▪纯CSS实现鼠标放上去改变文字内容
▪li中插入img图片间有空隙的解决方案
▪CSS3中Transition属性详解以及示例分享
▪父div高度不能自适应子div高度的解决方案
▪告别AJAX实现无刷新提交表单
▪从零学CSS系列之文本属性
▪HTML 标签
▪CSS3+Js实现响应式导航条
▪CSS3实例分享之多重背景的实现(Multiple background...
▪用css截取字符的几种方法详解(css排版隐藏溢...
▪页面遮罩层,并且阻止页面body滚动。bootstrap...
▪CSS可以做的几个令你叹为观止的实例分享
▪详细分析css float 属性以及position:absolute 的区...
▪IE6/IE7/IE8/IE9中tbody的innerHTML不能赋值的完美解...
▪CSS小例子(只显示下划线的文本框,像文字一...
▪可以给img元素设置背景图
▪不通过JavaScript实现的自动滚动视差效果
▪div+CSS 兼容小摘
▪CSS的inherit与auto使用分析
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3