0
var accordion = {

init: function(options, elem) {
var self = this;

self.elem = elem;

self.options = $.extend( {}, $.fn.accordion.options, options );

// call methods
self.hideDD();
},

hideDD: function() {
    var self = this;

    $(self.elem + ' dd').hide();
}

};

在 hideDD 方法中,$(self.elem + ' dd').hide();如果存在则给出错误self.elem,它仅在我刚刚输入时才有效,$('dd').hide()但我不希望这样,因为它选择了页面上的所有 DD 元素。

为什么它不能按原样工作?

4

2 回答 2

2

self.elem + ' dd'正在构造一个字符串。我认为不self.elem包含字符串;它包含一个对象。那么,字符串连接的结果就是像"[object Object] dd".

因此,改为尝试仅搜索 DOM 对象的子对象:

$(self.elem).find('dd').hide();
于 2013-06-24T09:57:53.237 回答
0

您应该使用.find()方法,因为您的选择器无效:

$(self.elem).find('dd').hide();

当您使用时,$(self.elem + ' dd')您基本上想要:$($(self.elem).selector + ' dd')但这只是错误的,因为您在 jquery 对象和 BTW 中包装了两次元素,不推荐使用 jquery 对象的 selector 属性。所以这里最简单的解决方案是搜索 self.element 的后代,然后您可以使用.find()方法或其他方法作为.children()直接后代。

于 2013-06-24T09:56:47.997 回答