Missing prevUntil - $('#demo').prev('a');
Closed this issue · 4 comments
alvarotrigo commented
Having:
<a href="#">Text</a>
<b>Text 2</b>
<a id="demo" href="#">Text 3</a>
We want to return the prev a
, not the <b>
element:
$('#demo').prev('a'); // <a href="#">Text</a>
In jQuery they call it internally prevUntil
:
nextUntil: function(elem, i, until) {
return dir(elem, "nextSibling", until);
},
prevUntil: function(elem, i, until) {
return dir(elem, "previousSibling", until);
},
alvarotrigo commented
I would suggest something on these lines:
function prevUntil(item, selector){
var prev = item.previousElementSibling
while(prev && !prev.matches(selector)){
prev = prev.previousElementSibling;
}
return prev;
}
alvarotrigo commented
Perhaps something like:
function until(item, selector, fn){
var sibling = item[fn]
while(sibling && !sibling.matches(selector)){
sibling = sibling[fn];
}
return sibling;
}
function prevUntil(item, selector){
return until(item, selector, 'previousElementSibling')
}
function nextUntil(item, selector){
return until(item, selector, 'nextElementSibling')
}
CarloMartini commented
@alvarotrigo Since you are already proposing code solutions, I think you can directly open some pull requests.
camsong commented
@alvarotrigo looks good to me, can you raise a PR?