jQuery中样式和属性模块简单分析

1、行内样式操作

  • 目标:扩展框架实现行内样式的增删改查

1.1 创建 css 方法

  • 目标:实现单个样式或者多个样式的操作

1.1.1 css方法 -获取样式

  • 注意:使用 style 属性只能获取行内样式
  • 解释:获取类或者外部样式文件中设置的样式要使用
    • W3C规范:window.getComputedStyle(dom)
    • IE中 :dom.currentStyle
itcast.fn.extend({
    css: function(name, value) {
        return window.getComputedStyle(this[0])[name];
    }
});

1.1.2 css方法 -设置样式

  • 解释:两个参数表示设置样式
itcast.fn.extend({
    css: function(name, value) {
        if(value === undefined) {
            return window.getComputedStyle(this[0])[name];
        }

        return this.each(function() {
            this.style[name] = value;
        });
    }
});

1.1.3 css方法 -对象字面量参数

  • 解释:参数为对象字面量同时设置多个样式属性
itcast.fn.extend({
    css: function(name, value) {
        if(value === undefined) {
            if(typeof name === "object") {
                return this.each(function() {
                    for(var k in name) {
                        this.style[k] = name[k];
                    }
                });
            }

            return window.getComputedStyle(this[0])[name];
        } else {
            return this.each(function() {
                this.style[name] = value;
            });
        }
    }
});

2、类操作

  • 目标:扩展框架实现类样式的增删改查

2.1 hasClass方法 -判断有没有类

  • 注意:判断匹配的所有元素中是否具有指定的类
itcast.fn.extend({
    hasClass: function(cName) {
        var hasCName = false;
        // 判断第一个元素
        itcast.each(this[0].className.split(" "), function(i, v) {
            if(v === cName) {
                hasCName = true;
                return false;
            }
        });
        return hasCName;

        // 判断所有元素
        // this.each(function() {
        //     hasCName = (" " + this.className + " ")
        //                     .indexOf( " " + trim(cName) + " ") !== -1;
        //     if(hasCName) {
        //         hasCName = true;
        //         return false;
        //     }
        // });
        // return hasCName;
    }
});

2.2 addClass方法 -添加类

itcast.fn.extend({
    addClass: function(cName) {
        return this.each(function() {
            var className = this.className;
            className += " " + cName;
            this.className = itcast.trim(className);
        });
    }
});

2.3 removeClass -移除类

itcast.fn.extend({
    removeClass: function(cName) {
        return this.each(function() {
            var cArr = this.className.split(" "),
                i, len = cArr.length;

            for(i = 0; i < len; i++) {
                if(cArr[i] === cName) {
                    break;
                }
            }

            cArr.splice(i, 1);
            this.className = cArr.join(" ");

            // 2 replace 替换
            // var className = " " + this.className + " ";
            // this.className = itcast.trim(className.replace(" " + cName + " ", " "));

            // 处理多个相同类名的情况
            // var clsName = " " + this.className.trim() + " ";
            // while(clsName.indexOf(" " + name + " ") > -1) {
            //    clsName = clsName.replace(" " + name + " ", " ");
            // }
            // this.className = clsName.trim();
        });
    }
});

2.4 toggleClass -切换类

itcast.fn.extend({
    toggleClass: function(cName) {
        if(this.hasClass(cName)) {
            this.removeClass(cName);
        } else {
            this.addClass(cName);
        }
        return this;
    }
});

3、属性模块

3.1 演示jQuery中的相关方法

  • 目标:复习jQuery中常用的属性操作方法
  • 内容:attr / val / html / text
  • 特点:
    • 设置:给所有匹配到的元素设置
    • 读取:只获取第一个元素的属性或内容

3.2 attr方法 -属性操作

  • 注意:setAttribute 只能用来设置默认值。要访问或修改当前值,使用 elt[name] = value 代替
itcast.fn.extend({
    attr: function(name, value) {
        if(value === undefined) {
            return this[0].getAttribute(name);
        }

        return this.each(function() {
            // this.setAttribute(name, value);
            this[name] = value;
        });
    }
});
  • 案例:随机切换图片

3.3 表单值操作

itcast.fn.extend({
    val: function(value) {
        if(value === undefined) {
            return this[0].value;
        }

        return this.each(function() {
            this.value = value;
        });
    }
});

3.4 html 和 text操作

3.4.1 html 操作

itcast.fn.extend({
    html: function(html) {
        if(html === undefined) {
            return this[0].innerHTML;
        }

        return this.each(function() {
            this.innerHTML = html;
        });
    }
});

3.4.2 text 操作

  • 注意:innerText是非标准属性
itcast.extend({
    getInnerText: function(dom) {
        var textArr;
        if(dom.innerText !== undefined) {
            return dom.innerText;
        }
        textArr = getNodeText(dom);
        return textArr.join("");

        function getNodeText(node) {
            var cNodes = node.childNodes,
                len = cNodes.length, i, cNode,
                arr = [];

            for(i = 0; i < len; i++) {
                cNode = cNodes[i];
                if(cNode.nodeType === 3) {
                    arr.push(cNode.nodeValue);
                } else if(cNodes.nodeType === 1) {
                    arr = arr.concat( getNodeText(cNode) );
                }
            }
            return arr;
        }
    },
    setInnerText: function(dom, str) {
        if("innerText" in dom) {
            dom.innerText = str;
        } else {
            dom.innerHTML = "";
            dom.appendChild( document.createTextNode(str) );
        }
    }
});

itcast.fn.extend({
    text: function(text) {
        if(text === undefined) {
            return itcast.getInnerText(this[0]);
        }

        return this.each(function() {
            itcast.setInnerText(this, text);
        });
    }
});
时间: 2024-10-01 02:59:23

jQuery中样式和属性模块简单分析的相关文章

jquery中attr和prop的区别分析

这篇文章主要介绍了jquery中attr和prop的区别分析的相关资料,需要的朋友可以参考下 在高版本的jquery引入prop方法后,什么时候该用prop?什么时候用attr?它们两个之间有什么区别?这些问题就出现了. 关于它们两个的区别,网上的答案很多.这里谈谈我的心得,我的心得很简单: • 对于HTML元素本身就带有的固有属性,在处理时,使用prop方法. • 对于HTML元素我们自己自定义的DOM属性,在处理时,使用attr方法. 上面的描述也许有点模糊,举几个例子就知道了. 复制代码代

jQuery中的css属性对应名称

css中一些样式属性可以直接引用到jquery中,但是有些属性在jquery中与在css中有些区别,下面就是一些常用属性在css与jquery中的名称. jQuery中的css属性对应名称 css jQuery bottom bottom left left right right top top width width min-width minWidth max-width maxWidth height height min-height minHeight max-height maxH

rocketmq中的NettyRemotingClient类的简单分析

rocketmq中的NettyRemotingClient类的简单分析 Bootstrap handler = this.bootstrap.group(this.eventLoopGroupWorker).channel(NioSocketChannel.class) .option(ChannelOption.TCP_NODELAY, true) .option(ChannelOption.SO_KEEPALIVE, false) .option(ChannelOption.CONNECT_

Collections中sort()方法源代码的简单分析

Collections的sort方法代码: public static <T> void sort(List<T> list, Comparator<? super T> c) { Object[] a = list.toArray(); Arrays.sort(a, (Comparator)c); ListIterator i = list.listIterator(); for (int j=0; j<a.length; j++) { i.next(); i.

java 中 “文件” 和 “流” 的简单分析

java 中 FIle 和 流的简单分析 File类 简单File 常用方法 创建一个File 对象,检验文件是否存在,若不存在就创建,然后对File的类的这部分操作进行演示,如文件的名称.大小等 //创建一个File 对象,检验文件是否存在,若不存在就创建然后对File package wfu; import java.io.File; import java.io.IOException; import java.util.Date; import java.util.Scanner; pu

jQuery - 02. 样式表属性操作/类操作、动画、显示隐藏、滑入、淡入、停止动画、节点操作、添加对象、清空节点

样式表属性操作.css $("div").css({'width':100,'height':100,'background':'red'}); $("div").css("background","pink"); 类操作 .addClass添加类   $("div").addClass("class"); .removeClass删除类   $("div).removeCla

属性动画简单分析(二)

在<属性动画简单解析(一)>分析了属性动画ObjectAnimation的初始化流程: 1)通过ObjectAnimation的ofXXX方法,设置propertyName和values. 2)将propertyName和values封装成PropertyValueHolder对象:每个PropertyValueHolder对象持有values组成的帧序列对象KeyFrameSet对象: 3)将步骤2创建的PropertyValueHolder对象用ObjectAnimation的mValue

jquery中event对象属性与方法小结

JQuery事件中的Event属性是经常性的被忽略的.大多数时间你的确不怎么用它,但有些时候它还是它还是有作用的.如获知触发时用户的环境(是否按了shift etc).每个浏览器对event都有不同的地方,Jquery对Event做了标准化所以可以放心用. * .target  这个反应触发事件的DOM对象,可以在事件冒泡的时候判断是否是事件源头(compare event.target to this) * .pageX:  鼠标的left属性,相对于page * .pageY:  鼠标的to

lua-epoll 模块简单分析

这个模块是把Linux下的epoll操作按照Lua Cfunction 的格式封装出来,供lua使用. Lua要求每一个扩展模块,必须提供luaopen_XXX(lua_State *L) 作为模块的入口函数,此函数会在require加载模块时被调用到.我们就从这个函数开始分析: static const struct luaL_Reg epoll[]={     {"setnonblocking",setnonblocking},     {"create",ep