-
-
Notifications
You must be signed in to change notification settings - Fork 1.6k
/
traversing.js
95 lines (81 loc) · 2.14 KB
/
traversing.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
(function() {
var $, children, each, find, next, parent, prev, siblings, soupselect, _;
_ = require("underscore");
soupselect = require("cheerio-soupselect");
$ = require("../cheerio");
/*
Stupidly simple traversal
TODO : Make it more jQuery-like
*/
find = exports.find = function(selector) {
var elem;
if (!selector) return this;
elem = soupselect.select(this.toArray(), selector);
return $(elem);
};
parent = exports.parent = function(elem) {
if (this[0] && this[0].parent) {
return $(this[0].parent);
} else {
return null;
}
};
next = exports.next = function(elem) {
var nextSibling;
if (!this[0]) return null;
nextSibling = this[0].next;
while (nextSibling) {
if ($.isTag(nextSibling)) return $(nextSibling);
nextSibling = nextSibling.next;
}
return null;
};
prev = exports.prev = function(elem) {
var prevSibling;
if (!this[0]) return null;
prevSibling = this[0].prev;
while (prevSibling) {
if ($.isTag(prevSibling)) return $(prevSibling);
prevSibling = prevSibling.prev;
}
return null;
};
siblings = exports.siblings = function(elem) {
var sibs;
var _this = this;
if (this.parent()) {
sibs = this.parent().children();
} else {
sibs = this.siblingsAndMe();
}
siblings = _.filter(sibs, function(elem) {
return elem !== _this[0] && $.isTag(elem);
});
return $(siblings);
};
children = exports.children = function(selector) {
if (this[0] && this[0].children) {
children = _.filter(this[0].children, function(elem) {
return $.isTag(elem);
});
if (selector !== void 0) {
if (_.isNumber(selector)) {
if (children[selector]) {
return $(children[selector]);
} else {
return null;
}
} else {
return $(children).find(selector);
}
}
return $(children);
} else {
return null;
}
};
each = exports.each = function(callback, args) {
return $.each(this, callback, args);
};
module.exports = $.fn.extend(exports);
}).call(this);