使用jQuery的一些优化心得

先祝大家2019快乐呀 本来打算一号写一篇单独的博客的 可是最近没怎么遇到bug和难的需求 所以没想到要写什么 只能写一写用jquery怎么久了 看到的一些博客和个人使用的一些优化心得

废话不说了 正文开始

一、jQuery链式

这个太重要了 在jQ中是很常用的技巧

<!-- HTML -->
<div id="xl-users-type" class="xl-users-type">
    <p>
        <span>用户</span>
        <i class="xl-backstage-icon xl-icon-select"></i>
    </p>
    <ul>
        <li data-type="user">用户</li>
        <li data-type="student">xxx</li>
        <li data-type="teacher">小管理</li>
        <li data-type="controller">管理员</li>
    </ul>
    <span class="xl-dialog-error"></span>
</div>
//jQuery
//贴一个项目用的代码
$(document).on('click','#xl-users-type p',function (){
    if(!$(this).next().is(":animated"))
        $(this).toggleClass('xl-show').next().slideToggle().next().next().hide();
}).on('click','#xl-users-type li',function (){
    $(this).siblings().removeClass('xl-show').end().addClass('xl-show').parent().prev().find('span').text($(this).text()).parent().click();
});

可以看到使用JQ的链式可以减少代码量 更优雅

二、使用.on()绑定事件

如果你使用的是jQ1.7版本以上 请快点无情的抛弃.live()、.bind()和. delegate() 然后使用.on()!

.on()性能是前面几个的几倍起步 最直观的体验就是 我在兼容ie7时 使用.live()和.on()绑定未来元素时 .on()是秒打开的 .live()至少三秒以上才看到界面

上面链式的例子我也是用了.on()绑定元素 把未来元素绑定在了$(document) 因为页面是ajax加载的 加载完不绑在$(document)的话就不能触发事件了

//普通绑定
$(select).on('click',function (){
    //代码
});

//绑定未来元素
$(document).on('click','select',function (){
    //代码
});

//解除.on()事件绑定用.off()
$(select).off();

2019年1月9日 23:31:08

今天我发现如果是未来元素的话 可以不绑定到$(document) 只需要绑定到页面加载时就有的并且不会被删除的元素即可

.click( function(){} )和.on(‘click’,function(){})这两者的区别在于 只要后面不用为新增元素添加事件的话就用.click(),.click()属于静态加载

三、同一个地方多处需要点击事件可以写在一起

$(select).on('click',function (e){
    var target=e.target;
    switch (target) {
        case $(select)[0]:
            //代码
            break;
        case $(select)[0]:
            //代码
            break;
        case $(select)[0]:
            //代码
            break;
        case $(select)[0]:
            //代码
            break;
        default:
            return false;
    }
    return false;
})

用switch区分target,但要记住选择器后面一定要加[0] 转化为javascript对象 如果不加是不会进入case的 因为获取到的还是JQ对象 没办法进入判断

这种我通常用在一个区域有多处按钮 这样可以减少很多代码量

四、使用.each()时定义变量保存$(this)

$(select).each(function (i){
    var $this=$(this);
    //代码
});

这样会使代码执行速度加快

暂时就想到怎么多 以后再想到什么还会在这里更新

2019年1月3日 19:12:58

判断网站是否使用了jQuery

F12进入控制台输入jQuery

如果没有报错代表该网站使用了jQuery 拿GitHub为案例 上一年已经宣布完全移除jQuery 全部代码使用原生javascript

只要不是报错 说明网站使用jQuery

五、提示框显示几秒后隐藏(一直触发事件不会隐藏)

$(select).stop().show().delay(1500).hide(0)
//.delay(1500)控制隐藏秒数 单位毫秒
提示框演示

第一次弹出提示框只点了一次 1.5秒后隐藏

第二次弹出提示框时点击多次 一直显示 停止后1.5秒隐藏

说点什么

avatar
  Subscribe  
提醒