jQuery UI - 这等同于什么?

时间:2014-12-14 15:46:14

标签: javascript jquery jquery-ui jquery-plugins jquery-widgets

我正在阅读我正在扩展的jquery-ui小部件的来源,我完全被这一行代码所困扰。

this.placeholder[intersection === 1 ? "next" : "prev"]()[0] !== itemElement

如果我理解正确,那意味着上述只能等同于两件事:

this.placeholder["next"]()[0] !== itemElement
this.placeholder["prev"]()[0] !== itemElement

它想做什么?它如何执行数组键?

这是定义this.placeholder的地方:

_createPlaceholder: function(that) {
    that = that || this;
    var className,
        o = that.options;

    if(!o.placeholder || o.placeholder.constructor === String) {
        className = o.placeholder;
        o.placeholder = {
            element: function() {

                var nodeName = that.currentItem[0].nodeName.toLowerCase(),
                    element = $( "<" + nodeName + ">", that.document[0] )
                        .addClass(className || that.currentItem[0].className+" ui-sortable-placeholder")
                        .removeClass("ui-sortable-helper");

                if ( nodeName === "tr" ) {
                    that.currentItem.children().each(function() {
                        $( "<td>&#160;</td>", that.document[0] )
                            .attr( "colspan", $( this ).attr( "colspan" ) || 1 )
                            .appendTo( element );
                    });
                } else if ( nodeName === "img" ) {
                    element.attr( "src", that.currentItem.attr( "src" ) );
                }

                if ( !className ) {
                    element.css( "visibility", "hidden" );
                }

                return element;
            },
            update: function(container, p) {

                // 1. If a className is set as 'placeholder option, we don't force sizes - the class is responsible for that
                // 2. The option 'forcePlaceholderSize can be enabled to force it even if a class name is specified
                if(className && !o.forcePlaceholderSize) {
                    return;
                }

                //If the element doesn't have a actual height by itself (without styles coming from a stylesheet), it receives the inline height from the dragged item
                if(!p.height()) { p.height(that.currentItem.innerHeight() - parseInt(that.currentItem.css("paddingTop")||0, 10) - parseInt(that.currentItem.css("paddingBottom")||0, 10)); }
                if(!p.width()) { p.width(that.currentItem.innerWidth() - parseInt(that.currentItem.css("paddingLeft")||0, 10) - parseInt(that.currentItem.css("paddingRight")||0, 10)); }
            }
        };
    }

    //Create the placeholder
    that.placeholder = $(o.placeholder.element.call(that.element, that.currentItem));

    //Append it after the actual current item
    that.currentItem.after(that.placeholder);

    //Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)
    o.placeholder.update(that, that.placeholder);

}

如果有人能对此有所了解,我会非常感激。

1 个答案:

答案 0 :(得分:2)

它获得了前一个或下一个DOM元素。由于jQuery返回一个类似数组的对象,[0]是第一个存储的DOM项。

this.placeholder.prev() 

相同
this.placeholder["prev"]()

后者称为bracket notation

相关问题