jquery - 我该如何编写这个 jQuery 函数,使其干净高效?

标签 jquery performance

我编写了一些 jQuery(在 Stack Overflow 的帮助下!),它可以在单击时滑动打开面板,并将可单击位的切换从“显示全部”更改为“隐藏全部”。

它有效,但我试图找出最有效的方法,因为它对我来说似乎有点长,并且一些 HTML 是重复的。

我尝试过使用变量并分配要重复的 HTML,但它不起作用,我无法弄清楚我的逻辑问题出在哪里!

这是工作版本和 a working fiddle here :

  $(function () {
    //Hide panel with jQuery and create toggle button so subjects will just show up if there's no javascript
    $("#panelSub").hide();
    $('#toggleSubjects').html('<h4 class="subjectOpen"><i class="fa fa-arrow-circle-down"></i>Show All Subjects<i class="fa fa-arrow-circle-down"></i></h4>');

    //Toggle extra subject panel
    $("#toggleSubjects").click(function () {
        $("#panelSub").slideToggle();
        //Change toggle text for show / hide
        if ($.trim($('.subjectOpen').text()) === 'Show All Subjects') {
            $(this).html('<h4 class="subjectOpen"><i class="fa fa-arrow-circle-up"></i>Hide All Subjects<i class="fa fa-arrow-circle-up"></i></h4>');
        } else {
            $(this).html('<h4 class="subjectOpen"><i class="fa fa-arrow-circle-down"></i>Show All Subjects<i class="fa fa-arrow-circle-down"></i></h4>');
        }
    });
    return false;
});

这是我一直在尝试的“更高效”的非工作版本,对于它的糟糕程度提前表示歉意:/

    var pOpen = '<h5 class="subjectOpen"><i class="fa fa-arrow-circle-down"></i>Show All Subjects <i class="fa fa-arrow-circle-down"></i></h5>';
var pClose = '<h5 class="subjectOpen"><i class="fa fa-arrow-circle-down"></i>Show All Subjects <i class="fa fa-arrow-circle-down"></i></h5>';
var p = $('#toggleSubjects').html();

$(function() {
//Hide panel with jQuery and create toggle button so subjects will just show if there's no javascript
$("#panelSub").hide();

var p = pOpen.html().appendTo('panelSub');
//Toggle subject panel
$("#toggleSubjects").click(function(){
    $("#panelSub").slideToggle("slow");
    //Change toggle text for show / hide
        if ($.trim($('.subjectOpen').text()) === 'Show All Subjects') {
        $(this).html() === pClose.html();
        } else {
        $(this).html()=== pOpen.html();    
            }
        });
        return false;
 });

最佳答案

请查看更新后的 jsFiddle:https://jsfiddle.net/emerfan/2oqxL8hx/2/

我已将您的 JS 代码更改为:

$(document).ready(function () {
    var theToggle = '<div class="panel-heading" id="toggleSubjects"><h5 class="subjectOpen"> <i class="fa fa-arrow-circle-down"></i> <i class="fa fa-arrow-circle-down"></i></h5></div>';
    $("#panelSub").hide();
    $(".panel-default").append(theToggle);
    $("#toggleSubjects").click(function () {
        $("#panelSub").slideToggle("slow");                
        $(this).find('i').toggleClass('fa-arrow-circle-down fa-arrow-circle-up')
    });
    return false;
});

并更新了您的 HTML 和 CSS 以保存您的所有结构和内容。 将事物分开(HTML、CSS 和 JS)是一个很好的做法

稍后编辑:我已更新了适合您需求的代码。

关于jquery - 我该如何编写这个 jQuery 函数,使其干净高效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29792814/

相关文章:

jquery - 当窗口达到一定宽度时用jquery删除css类

javascript - 如何将列表项添加回嵌套元素?

sql-server - T-SQL CTE 的性能特征

performance - 最小化请求数量与浏览器缓存和多个域

Java多线程切换上下文VS提交新任务以及监控队列的解决方案

javascript - IE11的快捷键实现

jquery - stackoverflow如何实现逐渐消失的 "Please consider . . "弹窗

php - 在 php 和 js 中设置 JSON

c++ - 在优化代码中是否调用了一个空函数?

c++ - OpenCL 内核性能非常糟糕。为什么我的代码没有 OpenCL 会更好?