Skip to content

Commit 9eff2f6

Browse files
Merge pull request #245 from jugglinmike/parents-bug
Correct behavior of `Cheerio#parents`
2 parents 2cac9e4 + 4783553 commit 9eff2f6

File tree

3 files changed

+9
-5
lines changed

3 files changed

+9
-5
lines changed

lib/api/attributes.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -70,12 +70,13 @@ var val = exports.val = function(value) {
7070
switch (this.attr('type')) {
7171
case 'radio':
7272
var queryString = 'input[type=radio][name=' + this.attr('name') + ']:checked';
73-
var parentEl = this;
73+
var parentEl, root;
7474

7575
// Go up until we hit a form or root
7676
parentEl = this.closest('form');
7777
if (parentEl.length === 0) {
78-
parentEl = this.make(this.parents().last()[0].parent);
78+
root = (this.parents().last()[0] || this[0]).parent;
79+
parentEl = this.make(root);
7980
}
8081

8182
if (querying) {

lib/api/traversing.js

+1-2
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,7 @@ var parent = exports.parent = function(selector) {
3131

3232
var parents = exports.parents = function(selector) {
3333
if (this[0] && this[0].parent) {
34-
var elems = traverseParents(this, this[0].parent, selector, Infinity);
35-
return elems.length ? elems : this;
34+
return traverseParents(this, this[0].parent, selector, Infinity);
3635
}
3736
return this;
3837
};

test/api.traversing.js

+5-1
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ describe('$(...)', function() {
166166
expect(result).to.have.length(2);
167167
expect(result[0].attribs.id).to.be('fruits');
168168
expect(result[1].attribs.id).to.be('food');
169-
result = $('#food', food).parents()
169+
result = $('#fruits', food).parents()
170170
expect(result).to.have.length(1);
171171
expect(result[0].attribs.id).to.be('food');
172172
})
@@ -183,6 +183,10 @@ describe('$(...)', function() {
183183
var result = $('.saladbar', food).parents();
184184
expect(result).to.have.length(0);
185185
})
186+
it('() : should return an empty set for top-level elements', function() {
187+
var result = $('#food', food).parents();
188+
expect(result).to.have.length(0);
189+
});
186190
});
187191

188192
describe('.parent', function() {

0 commit comments

Comments
 (0)