show()。parent()。show() - 这里发生了什么?

时间:2011-02-04 01:16:12

标签: jquery

我不明白当你做一连串的.show()时会发生什么。我也没有写这段代码或者想知道如何弄清楚这里发生了什么。因此这个问题。

// Remove favorite category
        $(".FavoriteRemove").click(function() {
            var cat = $(this).parents(".Category");     //the parent of the clicked item is the category/bundle
            var catid = $(this).attr("catid");          //the id tag on the clicked item is the BundleID
            $.post($(this).attr("href"), function() {   //the href tag is the post URL for adding a favorite
                cat.remove();                           //here we remove the category/bundle

//*** WHAT IS THIS DOING? v
            $(".Category[catid=" + catid + "]").show().parent().show();
//*** NO THAT UP THERE ^
            if ($(".FavoriteCategories div").length == 0)
                $(".FavoriteCategories").hide();
            //bindCategories();
        });
        return false;
    });

有人可以描述这意味着什么吗?我知道目标是类'Category',其属性与ID匹配,但我不明白函数链的含义。

感谢。

3 个答案:

答案 0 :(得分:4)

“正在显示”表示将其display样式属性从none设置为其初始(或默认)值,例如block

答案 1 :(得分:3)

在JavaScript中,您可以直接“使用”函数调用的返回值,而无需将值赋给变量。 Here is a stripped down example

var john = {
    me: function() {
        alert('...John');
    }
}

var foo = {
    call: function() {
        alert('You called..');
        return this;        // <- note that an object is returned    
    },                      // (in this case foo itself but could be any object)

    callSomeoneElse: function() {
        alert('You called..');
        return john;       // <- note that an object is returned
    },

    me: function() {
        alert('...me');
    }
}

foo.call().me()
foo.callSomeoneElse().me()

现在进行方法调用:

如果你有

$(selector).show()

然后将显示所选元素。 show再次返回所选元素集(由$(selector)选择的相同元素)。这允许我们在它们上调用另一个方法:parent()选择(返回)这些元素的父节点(所以我们现在有一个不同的集合),第二个show()对这个新的(父)集合进行操作(并返回父集)。

所以

$(selector).show().parent().show()

将显示所选元素及其父母。


整个概念称为fluent interface,通过method chaining实现。

答案 2 :(得分:2)

$(".Category[catid=" + catid + "]").show().parent().show();

它将显示(使可见)具有类Category的元素和设置为变量 catid 的catid,并且它将显示父元素:

<div>
   <span class="Category" catid="1"></span>
</div>

在这种情况下,它会显示span和div。