我想在#addData可见时禁用表列排序
但是当我将if ($("#addData").is(":hidden"))应用于.each()函数时,它不起作用。

有办法吗?

这是表排序代码:

$('th:contains(Remote), th:contains(Interval),th:contains(Last), th:contains(Active)')
    .each(function(){

        var th = $(this),
            thIndex = th.index(),
            inverse = false;

        th.click(function(){

            table.find('td').filter(function(){

                return $(this).index() === thIndex;

            }).sortElements(function(a, b){

                return $.text([a]) > $.text([b]) ?
                    inverse ? -1 : 1
                    : inverse ? 1 : -1;

            }, function(){

                // parentNode is the element we want to move
                return this.parentNode;

            });

            inverse = !inverse;

        });

    });


jQuery.fn.sortElements = (function(){

    var sort = [].sort;

    return function(comparator, getSortable) {

        getSortable = getSortable || function(){return this;};

        var placements = this.map(function(){

            var sortElement = getSortable.call(this),
                parentNode = sortElement.parentNode,

                // Since the element itself will change position, we have
                // to have some way of storing its original position in
                // the DOM. The easiest way is to have a 'flag' node:
                nextSibling = parentNode.insertBefore(
                    document.createTextNode(''),
                    sortElement.nextSibling
                );

            return function() {

                if (parentNode === this) {
                    throw new Error(
                        "You can't sort elements if any one is a descendant of another."
                    );
                }

                // Insert before flag:
                parentNode.insertBefore(this, nextSibling);
                // Remove flag:
                parentNode.removeChild(nextSibling);

            };

        });

        return sort.call(this, comparator).each(function(i){
            placements[i].call(getSortable.call(this));
        });

    };

})();

最佳答案

将可见性检查添加到点击的点击事件。如果将#addData存储在每个变量中的变量中,则可以提高性能。

$('th:contains(Remote), th:contains(Interval),th:contains(Last), th:contains(Active)')
    .each(function(){

        var th = $(this),
            thIndex = th.index(),
            inverse = false;
        //BOOSTIE: var addData = $('#addData');
        th.click(function(){
            //BOOSTIE: if(addData.is(':hidden'))
            if($("#addData").is(":hidden")) //Check to see if its visible
            {
              table.find('td').filter(function(){

                  return $(this).index() === thIndex;

              }).sortElements(function(a, b){

                  return $.text([a]) > $.text([b]) ?
                      inverse ? -1 : 1
                      : inverse ? 1 : -1;

              }, function(){

                  // parentNode is the element we want to move
                  return this.parentNode;

              });

              inverse = !inverse;
            }
        });

    });

关于javascript - 在($(#addData).is(:“visible”))时禁用表列排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25319485/

10-09 02:30